monaco-editor-core 0.56.0-dev-20251217 → 0.56.0-dev-20251218

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/esm/nls.keys.json +1 -1
  2. package/esm/nls.messages.cs.js +2 -2
  3. package/esm/nls.messages.de.js +2 -2
  4. package/esm/nls.messages.es.js +2 -2
  5. package/esm/nls.messages.fr.js +2 -2
  6. package/esm/nls.messages.it.js +2 -2
  7. package/esm/nls.messages.ja.js +2 -2
  8. package/esm/nls.messages.js +1 -1
  9. package/esm/nls.messages.json +1 -1
  10. package/esm/nls.messages.ko.js +2 -2
  11. package/esm/nls.messages.pl.js +2 -2
  12. package/esm/nls.messages.pt-br.js +2 -2
  13. package/esm/nls.messages.ru.js +2 -2
  14. package/esm/nls.messages.tr.js +2 -2
  15. package/esm/nls.messages.zh-cn.js +2 -2
  16. package/esm/nls.messages.zh-tw.js +2 -2
  17. package/esm/nls.metadata.json +4 -2
  18. package/esm/vs/base/browser/ui/actionbar/actionViewItems.js.map +1 -1
  19. package/esm/vs/base/browser/ui/findinput/findInput.js +6 -1
  20. package/esm/vs/base/browser/ui/findinput/findInput.js.map +1 -1
  21. package/esm/vs/base/browser/ui/inputbox/inputBox.js +17 -1
  22. package/esm/vs/base/browser/ui/inputbox/inputBox.js.map +1 -1
  23. package/esm/vs/base/browser/ui/toggle/toggle.js +78 -6
  24. package/esm/vs/base/browser/ui/toggle/toggle.js.map +1 -1
  25. package/esm/vs/editor/browser/services/editorWorkerService.js +6 -2
  26. package/esm/vs/editor/browser/services/editorWorkerService.js.map +1 -1
  27. package/esm/vs/editor/common/config/editorConfigurationSchema.js +49 -47
  28. package/esm/vs/editor/common/config/editorConfigurationSchema.js.map +1 -1
  29. package/esm/vs/editor/common/config/editorOptions.js +410 -410
  30. package/esm/vs/editor/common/core/editorColorRegistry.js +69 -69
  31. package/esm/vs/editor/common/editorContextKeys.js +47 -47
  32. package/esm/vs/editor/common/languages/modesRegistry.js +1 -1
  33. package/esm/vs/editor/common/languages.js +56 -56
  34. package/esm/vs/editor/common/model/editStack.js +1 -1
  35. package/esm/vs/editor/common/standaloneStrings.js +11 -11
  36. package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +2 -2
  37. package/esm/vs/editor/contrib/anchorSelect/browser/anchorSelect.js +6 -6
  38. package/esm/vs/editor/contrib/bracketMatching/browser/bracketMatching.js +6 -6
  39. package/esm/vs/editor/contrib/caretOperations/browser/caretOperations.js +2 -2
  40. package/esm/vs/editor/contrib/caretOperations/browser/transpose.js +1 -1
  41. package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +17 -17
  42. package/esm/vs/editor/contrib/codeAction/browser/codeAction.js +1 -1
  43. package/esm/vs/editor/contrib/codeAction/browser/codeActionCommands.js +29 -29
  44. package/esm/vs/editor/contrib/codeAction/browser/codeActionContributions.js +3 -3
  45. package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js +3 -3
  46. package/esm/vs/editor/contrib/codeAction/browser/codeActionMenu.js +8 -8
  47. package/esm/vs/editor/contrib/codeAction/browser/lightBulbWidget.js +9 -9
  48. package/esm/vs/editor/contrib/codelens/browser/codelensController.js +2 -2
  49. package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerCloseButton.js +1 -1
  50. package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerHeader.js +1 -1
  51. package/esm/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.js +1 -1
  52. package/esm/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerActions.js +7 -7
  53. package/esm/vs/editor/contrib/comment/browser/comment.js +6 -6
  54. package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js +10 -10
  55. package/esm/vs/editor/contrib/cursorUndo/browser/cursorUndo.js +2 -2
  56. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +4 -4
  57. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +9 -9
  58. package/esm/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +8 -8
  59. package/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +3 -3
  60. package/esm/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.js +2 -2
  61. package/esm/vs/editor/contrib/editorState/browser/keybindingCancellation.js +1 -1
  62. package/esm/vs/editor/contrib/find/browser/findController.js +16 -16
  63. package/esm/vs/editor/contrib/find/browser/findWidget.js +26 -26
  64. package/esm/vs/editor/contrib/folding/browser/folding.js +20 -20
  65. package/esm/vs/editor/contrib/folding/browser/folding.js.map +1 -1
  66. package/esm/vs/editor/contrib/folding/browser/foldingDecorations.js +9 -9
  67. package/esm/vs/editor/contrib/fontZoom/browser/fontZoom.js +3 -3
  68. package/esm/vs/editor/contrib/format/browser/formatActions.js +2 -2
  69. package/esm/vs/editor/contrib/gotoError/browser/gotoError.js +8 -8
  70. package/esm/vs/editor/contrib/gotoError/browser/gotoErrorWidget.js +14 -14
  71. package/esm/vs/editor/contrib/gotoSymbol/browser/goToCommands.js +39 -39
  72. package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js +1 -1
  73. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.js +3 -3
  74. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesTree.js +3 -3
  75. package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.js +3 -3
  76. package/esm/vs/editor/contrib/gotoSymbol/browser/referencesModel.js +8 -8
  77. package/esm/vs/editor/contrib/gotoSymbol/browser/symbolNavigation.js +3 -3
  78. package/esm/vs/editor/contrib/gpu/browser/gpuActions.js +4 -4
  79. package/esm/vs/editor/contrib/hover/browser/hoverActionIds.js +2 -2
  80. package/esm/vs/editor/contrib/hover/browser/hoverActions.js +24 -24
  81. package/esm/vs/editor/contrib/hover/browser/hoverCopyButton.js +2 -2
  82. package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +9 -9
  83. package/esm/vs/editor/contrib/hover/browser/markerHoverParticipant.js +5 -5
  84. package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
  85. package/esm/vs/editor/contrib/indentation/browser/indentation.js +20 -20
  86. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsHover.js +8 -8
  87. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +21 -21
  88. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +13 -13
  89. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +1 -1
  90. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +2 -2
  91. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +5 -5
  92. package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js +2 -2
  93. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +6 -6
  94. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +1 -1
  95. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js +3 -3
  96. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +20 -20
  97. package/esm/vs/editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js +1 -1
  98. package/esm/vs/editor/contrib/lineSelection/browser/lineSelection.js +1 -1
  99. package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js +31 -31
  100. package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js +2 -2
  101. package/esm/vs/editor/contrib/links/browser/links.js +10 -10
  102. package/esm/vs/editor/contrib/message/browser/messageController.js +1 -1
  103. package/esm/vs/editor/contrib/multicursor/browser/multicursor.js +22 -22
  104. package/esm/vs/editor/contrib/parameterHints/browser/parameterHints.js +1 -1
  105. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +4 -4
  106. package/esm/vs/editor/contrib/peekView/browser/peekView.js +18 -18
  107. package/esm/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.js +1 -1
  108. package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +25 -27
  109. package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js.map +1 -1
  110. package/esm/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.js +32 -32
  111. package/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +2 -2
  112. package/esm/vs/editor/contrib/rename/browser/rename.js +11 -11
  113. package/esm/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
  114. package/esm/vs/editor/contrib/smartSelect/browser/smartSelect.js +4 -4
  115. package/esm/vs/editor/contrib/snippet/browser/snippetController2.js +4 -4
  116. package/esm/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
  117. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
  118. package/esm/vs/editor/contrib/suggest/browser/suggest.js +9 -9
  119. package/esm/vs/editor/contrib/suggest/browser/suggestController.js +11 -11
  120. package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +17 -17
  121. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +2 -2
  122. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +2 -2
  123. package/esm/vs/editor/contrib/suggest/browser/wordContextKey.js +1 -1
  124. package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +33 -33
  125. package/esm/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js +4 -4
  126. package/esm/vs/editor/contrib/tokenization/browser/tokenization.js +1 -1
  127. package/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +1 -1
  128. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +24 -24
  129. package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js +5 -5
  130. package/esm/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +9 -9
  131. package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js +3 -3
  132. package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js +3 -3
  133. package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +62 -62
  134. package/esm/vs/platform/action/common/actionCommonCategories.js +6 -6
  135. package/esm/vs/platform/actionWidget/browser/actionList.js +4 -4
  136. package/esm/vs/platform/actionWidget/browser/actionWidget.js +7 -7
  137. package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js +5 -5
  138. package/esm/vs/platform/actions/browser/toolbar.js +2 -2
  139. package/esm/vs/platform/actions/common/menuService.js +2 -2
  140. package/esm/vs/platform/configuration/common/configurationRegistry.js +10 -10
  141. package/esm/vs/platform/contextkey/browser/contextKeyService.js +1 -1
  142. package/esm/vs/platform/contextkey/common/contextkey.js +9 -9
  143. package/esm/vs/platform/contextkey/common/contextkeys.js +9 -9
  144. package/esm/vs/platform/contextkey/common/scanner.js +5 -5
  145. package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
  146. package/esm/vs/platform/hover/browser/hoverWidget.js +1 -1
  147. package/esm/vs/platform/hover/browser/updatableHoverWidget.js +1 -1
  148. package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +4 -4
  149. package/esm/vs/platform/list/browser/listService.js +27 -27
  150. package/esm/vs/platform/markers/common/markerService.js +2 -2
  151. package/esm/vs/platform/markers/common/markers.js +6 -6
  152. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +8 -8
  153. package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
  154. package/esm/vs/platform/quickinput/browser/media/quickInput.css +38 -4
  155. package/esm/vs/platform/quickinput/browser/quickInput.js +42 -14
  156. package/esm/vs/platform/quickinput/browser/quickInput.js.map +1 -1
  157. package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
  158. package/esm/vs/platform/quickinput/browser/quickInputBox.js +13 -1
  159. package/esm/vs/platform/quickinput/browser/quickInputBox.js.map +1 -1
  160. package/esm/vs/platform/quickinput/browser/quickInputController.js +22 -12
  161. package/esm/vs/platform/quickinput/browser/quickInputController.js.map +1 -1
  162. package/esm/vs/platform/quickinput/browser/quickInputList.js +17 -12
  163. package/esm/vs/platform/quickinput/browser/quickInputList.js.map +1 -1
  164. package/esm/vs/platform/quickinput/browser/quickInputUtils.js +36 -8
  165. package/esm/vs/platform/quickinput/browser/quickInputUtils.js.map +1 -1
  166. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
  167. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeController.js +3 -3
  168. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeController.js.map +1 -1
  169. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.js +8 -4
  170. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.js.map +1 -1
  171. package/esm/vs/platform/quickinput/common/quickInput.js.map +1 -1
  172. package/esm/vs/platform/theme/common/colorUtils.js +2 -2
  173. package/esm/vs/platform/theme/common/colors/baseColors.js +18 -18
  174. package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -8
  175. package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
  176. package/esm/vs/platform/theme/common/colors/inputColors.js +47 -47
  177. package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
  178. package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
  179. package/esm/vs/platform/theme/common/colors/minimapColors.js +11 -11
  180. package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
  181. package/esm/vs/platform/theme/common/colors/quickpickColors.js +9 -9
  182. package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
  183. package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
  184. package/esm/vs/platform/undoRedo/common/undoRedoService.js +20 -20
  185. package/esm/vs/platform/workspace/common/workspace.js +1 -1
  186. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["vs/platform/quickinput/browser/quickInputList.ts"],"names":[],"mappings":"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","file":"quickInputList.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as cssJs from '../../../base/browser/cssValue.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js';\nimport { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.js';\nimport { AriaRole } from '../../../base/browser/ui/aria/aria.js';\nimport { IHoverWidget, IManagedHoverTooltipMarkdownString } from '../../../base/browser/ui/hover/hover.js';\nimport { IHoverDelegate } from '../../../base/browser/ui/hover/hoverDelegate.js';\nimport { HoverPosition } from '../../../base/browser/ui/hover/hoverWidget.js';\nimport { IIconLabelValueOptions, IconLabel } from '../../../base/browser/ui/iconLabel/iconLabel.js';\nimport { KeybindingLabel } from '../../../base/browser/ui/keybindingLabel/keybindingLabel.js';\nimport { IListVirtualDelegate } from '../../../base/browser/ui/list/list.js';\nimport { IListAccessibilityProvider, IListStyles } from '../../../base/browser/ui/list/listWidget.js';\nimport { Checkbox } from '../../../base/browser/ui/toggle/toggle.js';\nimport { RenderIndentGuides } from '../../../base/browser/ui/tree/abstractTree.js';\nimport { IObjectTreeElement, ITreeNode, ITreeRenderer, TreeVisibility } from '../../../base/browser/ui/tree/tree.js';\nimport { equals } from '../../../base/common/arrays.js';\nimport { ThrottledDelayer } from '../../../base/common/async.js';\nimport { compareAnything } from '../../../base/common/comparers.js';\nimport { memoize } from '../../../base/common/decorators.js';\nimport { isCancellationError } from '../../../base/common/errors.js';\nimport { Emitter, Event, EventBufferer, IValueWithChangeEvent } from '../../../base/common/event.js';\nimport { IMatch } from '../../../base/common/filters.js';\nimport { IMarkdownString } from '../../../base/common/htmlContent.js';\nimport { IParsedLabelWithIcons, getCodiconAriaLabel, matchesFuzzyIconAware, parseLabelWithIcons } from '../../../base/common/iconLabels.js';\nimport { KeyCode } from '../../../base/common/keyCodes.js';\nimport { Lazy } from '../../../base/common/lazy.js';\nimport { Disposable, DisposableStore, MutableDisposable } from '../../../base/common/lifecycle.js';\nimport { observableValue, observableValueOpts, transaction } from '../../../base/common/observable.js';\nimport { OS } from '../../../base/common/platform.js';\nimport { escape, ltrim } from '../../../base/common/strings.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { localize } from '../../../nls.js';\nimport { IAccessibilityService } from '../../accessibility/common/accessibility.js';\nimport { IInstantiationService } from '../../instantiation/common/instantiation.js';\nimport { WorkbenchObjectTree } from '../../list/browser/listService.js';\nimport { defaultCheckboxStyles } from '../../theme/browser/defaultStyles.js';\nimport { isDark } from '../../theme/common/theme.js';\nimport { IThemeService } from '../../theme/common/themeService.js';\nimport { IQuickPickItem, IQuickPickItemButtonEvent, IQuickPickSeparator, IQuickPickSeparatorButtonEvent, QuickPickFocus, QuickPickItem } from '../common/quickInput.js';\nimport { quickInputButtonToAction } from './quickInputUtils.js';\n\nconst $ = dom.$;\n\ninterface IQuickInputItemLazyParts {\n\treadonly saneLabel: string;\n\treadonly saneSortLabel: string;\n\treadonly saneAriaLabel: string;\n}\n\ninterface IQuickPickElement extends IQuickInputItemLazyParts {\n\treadonly hasCheckbox: boolean;\n\treadonly saneDetail?: string;\n\treadonly saneTooltip?: string | IMarkdownString | HTMLElement;\n\thidden: boolean;\n\telement?: HTMLElement;\n\tlabelHighlights?: IMatch[];\n\tseparator?: IQuickPickSeparator;\n}\n\ninterface IQuickInputItemTemplateData {\n\tentry: HTMLDivElement;\n\tcheckbox: MutableDisposable<Checkbox>;\n\ticon: HTMLDivElement;\n\touterLabel: HTMLElement;\n\tlabel: IconLabel;\n\tkeybinding: KeybindingLabel;\n\tdetail: IconLabel;\n\tseparator: HTMLDivElement;\n\tactionBar: ActionBar;\n\telement: IQuickPickElement;\n\ttoDisposeElement: DisposableStore;\n\ttoDisposeTemplate: DisposableStore;\n}\n\nclass BaseQuickPickItemElement implements IQuickPickElement {\n\tprivate readonly _init: Lazy<IQuickInputItemLazyParts>;\n\n\tconstructor(\n\t\treadonly index: number,\n\t\treadonly hasCheckbox: boolean,\n\t\tmainItem: QuickPickItem\n\t) {\n\t\tthis._init = new Lazy(() => {\n\t\t\tconst saneLabel = mainItem.label ?? '';\n\t\t\tconst saneSortLabel = parseLabelWithIcons(saneLabel).text.trim();\n\n\t\t\tconst saneAriaLabel = mainItem.ariaLabel || [saneLabel, this.saneDescription, this.saneDetail]\n\t\t\t\t.map(s => getCodiconAriaLabel(s))\n\t\t\t\t.filter(s => !!s)\n\t\t\t\t.join(', ');\n\n\t\t\treturn {\n\t\t\t\tsaneLabel,\n\t\t\t\tsaneSortLabel,\n\t\t\t\tsaneAriaLabel\n\t\t\t};\n\t\t});\n\t\tthis._saneDescription = mainItem.description;\n\t\tthis._saneTooltip = mainItem.tooltip;\n\t}\n\n\t// #region Lazy Getters\n\n\tget saneLabel() {\n\t\treturn this._init.value.saneLabel;\n\t}\n\tget saneSortLabel() {\n\t\treturn this._init.value.saneSortLabel;\n\t}\n\tget saneAriaLabel() {\n\t\treturn this._init.value.saneAriaLabel;\n\t}\n\n\t// #endregion\n\n\t// #region Getters and Setters\n\n\tprivate _element?: HTMLElement;\n\tget element() {\n\t\treturn this._element;\n\t}\n\tset element(value: HTMLElement | undefined) {\n\t\tthis._element = value;\n\t}\n\n\tprivate _hidden = false;\n\tget hidden() {\n\t\treturn this._hidden;\n\t}\n\tset hidden(value: boolean) {\n\t\tthis._hidden = value;\n\t}\n\n\tprivate _saneDescription?: string;\n\tget saneDescription() {\n\t\treturn this._saneDescription;\n\t}\n\tset saneDescription(value: string | undefined) {\n\t\tthis._saneDescription = value;\n\t}\n\n\tprotected _saneDetail?: string;\n\tget saneDetail() {\n\t\treturn this._saneDetail;\n\t}\n\tset saneDetail(value: string | undefined) {\n\t\tthis._saneDetail = value;\n\t}\n\n\tprivate _saneTooltip?: string | IMarkdownString | HTMLElement;\n\tget saneTooltip() {\n\t\treturn this._saneTooltip;\n\t}\n\tset saneTooltip(value: string | IMarkdownString | HTMLElement | undefined) {\n\t\tthis._saneTooltip = value;\n\t}\n\n\tprotected _labelHighlights?: IMatch[];\n\tget labelHighlights() {\n\t\treturn this._labelHighlights;\n\t}\n\tset labelHighlights(value: IMatch[] | undefined) {\n\t\tthis._labelHighlights = value;\n\t}\n\n\tprotected _descriptionHighlights?: IMatch[];\n\tget descriptionHighlights() {\n\t\treturn this._descriptionHighlights;\n\t}\n\tset descriptionHighlights(value: IMatch[] | undefined) {\n\t\tthis._descriptionHighlights = value;\n\t}\n\n\tprotected _detailHighlights?: IMatch[];\n\tget detailHighlights() {\n\t\treturn this._detailHighlights;\n\t}\n\tset detailHighlights(value: IMatch[] | undefined) {\n\t\tthis._detailHighlights = value;\n\t}\n}\n\nclass QuickPickItemElement extends BaseQuickPickItemElement {\n\treadonly onChecked: Event<boolean>;\n\n\tconstructor(\n\t\tindex: number,\n\t\treadonly childIndex: number,\n\t\thasCheckbox: boolean,\n\t\treadonly fireButtonTriggered: (event: IQuickPickItemButtonEvent<IQuickPickItem>) => void,\n\t\tprivate _onChecked: Emitter<{ element: IQuickPickElement; checked: boolean }>,\n\t\treadonly item: IQuickPickItem,\n\t\tprivate _separator: IQuickPickSeparator | undefined,\n\t) {\n\t\tsuper(index, hasCheckbox, item);\n\n\t\tthis.onChecked = hasCheckbox\n\t\t\t? Event.map(Event.filter<{ element: IQuickPickElement; checked: boolean }>(this._onChecked.event, e => e.element === this), e => e.checked)\n\t\t\t: Event.None;\n\n\t\tthis._saneDetail = item.detail;\n\t\tthis._labelHighlights = item.highlights?.label;\n\t\tthis._descriptionHighlights = item.highlights?.description;\n\t\tthis._detailHighlights = item.highlights?.detail;\n\t}\n\n\tget separator() {\n\t\treturn this._separator;\n\t}\n\tset separator(value: IQuickPickSeparator | undefined) {\n\t\tthis._separator = value;\n\t}\n\n\tprivate _checked = false;\n\tget checked() {\n\t\treturn this._checked;\n\t}\n\tset checked(value: boolean) {\n\t\tif (value !== this._checked) {\n\t\t\tthis._checked = value;\n\t\t\tthis._onChecked.fire({ element: this, checked: value });\n\t\t}\n\t}\n\n\tget checkboxDisabled() {\n\t\treturn !!this.item.disabled;\n\t}\n}\n\nenum QuickPickSeparatorFocusReason {\n\t/**\n\t * No item is hovered or active\n\t */\n\tNONE = 0,\n\t/**\n\t * Some item within this section is hovered\n\t */\n\tMOUSE_HOVER = 1,\n\t/**\n\t * Some item within this section is active\n\t */\n\tACTIVE_ITEM = 2\n}\n\nclass QuickPickSeparatorElement extends BaseQuickPickItemElement {\n\tchildren = new Array<QuickPickItemElement>();\n\t/**\n\t * If this item is >0, it means that there is some item in the list that is either:\n\t * * hovered over\n\t * * active\n\t */\n\tfocusInsideSeparator = QuickPickSeparatorFocusReason.NONE;\n\n\tconstructor(\n\t\tindex: number,\n\t\treadonly fireSeparatorButtonTriggered: (event: IQuickPickSeparatorButtonEvent) => void,\n\t\treadonly separator: IQuickPickSeparator,\n\t) {\n\t\tsuper(index, false, separator);\n\t}\n}\n\nclass QuickInputItemDelegate implements IListVirtualDelegate<IQuickPickElement> {\n\tgetHeight(element: IQuickPickElement): number {\n\n\t\tif (element instanceof QuickPickSeparatorElement) {\n\t\t\treturn 30;\n\t\t}\n\t\treturn element.saneDetail ? 44 : 22;\n\t}\n\n\tgetTemplateId(element: IQuickPickElement): string {\n\t\tif (element instanceof QuickPickItemElement) {\n\t\t\treturn QuickPickItemElementRenderer.ID;\n\t\t} else {\n\t\t\treturn QuickPickSeparatorElementRenderer.ID;\n\t\t}\n\t}\n}\n\nclass QuickInputAccessibilityProvider implements IListAccessibilityProvider<IQuickPickElement> {\n\n\tgetWidgetAriaLabel(): string {\n\t\treturn localize('quickInput', \"Quick Input\");\n\t}\n\n\tgetAriaLabel(element: IQuickPickElement): string | null {\n\t\treturn element.separator?.label\n\t\t\t? `${element.saneAriaLabel}, ${element.separator.label}`\n\t\t\t: element.saneAriaLabel;\n\t}\n\n\tgetWidgetRole(): AriaRole {\n\t\treturn 'listbox';\n\t}\n\n\tgetRole(element: IQuickPickElement) {\n\t\treturn element.hasCheckbox ? 'checkbox' : 'option';\n\t}\n\n\tisChecked(element: IQuickPickElement): IValueWithChangeEvent<boolean> | undefined {\n\t\tif (!element.hasCheckbox || !(element instanceof QuickPickItemElement)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tget value() { return element.checked; },\n\t\t\tonDidChange: e => element.onChecked(() => e()),\n\t\t};\n\t}\n}\n\nabstract class BaseQuickInputListRenderer<T extends IQuickPickElement> implements ITreeRenderer<T, void, IQuickInputItemTemplateData> {\n\tabstract templateId: string;\n\n\tconstructor(\n\t\tprivate readonly hoverDelegate: IHoverDelegate | undefined,\n\t) { }\n\n\t// TODO: only do the common stuff here and have a subclass handle their specific stuff\n\trenderTemplate(container: HTMLElement): IQuickInputItemTemplateData {\n\t\tconst data: IQuickInputItemTemplateData = Object.create(null);\n\t\tdata.toDisposeElement = new DisposableStore();\n\t\tdata.toDisposeTemplate = new DisposableStore();\n\t\tdata.entry = dom.append(container, $('.quick-input-list-entry'));\n\n\t\t// Checkbox\n\t\tconst label = dom.append(data.entry, $('label.quick-input-list-label'));\n\t\tdata.outerLabel = label;\n\t\tdata.checkbox = data.toDisposeTemplate.add(new MutableDisposable());\n\t\tdata.toDisposeTemplate.add(dom.addStandardDisposableListener(label, dom.EventType.CLICK, e => {\n\t\t\t// `label` elements with role=checkboxes don't automatically toggle them like normal <checkbox> elements\n\t\t\tif (data.checkbox.value && !e.defaultPrevented && data.checkbox.value.enabled) {\n\t\t\t\tconst checked = !data.checkbox.value.checked;\n\t\t\t\tdata.checkbox.value.checked = checked;\n\t\t\t\t(data.element as QuickPickItemElement).checked = checked;\n\t\t\t}\n\t\t}));\n\n\t\t// Rows\n\t\tconst rows = dom.append(label, $('.quick-input-list-rows'));\n\t\tconst row1 = dom.append(rows, $('.quick-input-list-row'));\n\t\tconst row2 = dom.append(rows, $('.quick-input-list-row'));\n\n\t\t// Label\n\t\tdata.label = new IconLabel(row1, { supportHighlights: true, supportDescriptionHighlights: true, supportIcons: true, hoverDelegate: this.hoverDelegate });\n\t\tdata.toDisposeTemplate.add(data.label);\n\t\tdata.icon = dom.prepend(data.label.element, $('.quick-input-list-icon'));\n\n\t\t// Keybinding\n\t\tconst keybindingContainer = dom.append(row1, $('.quick-input-list-entry-keybinding'));\n\t\tdata.keybinding = new KeybindingLabel(keybindingContainer, OS);\n\t\tdata.toDisposeTemplate.add(data.keybinding);\n\n\t\t// Detail\n\t\tconst detailContainer = dom.append(row2, $('.quick-input-list-label-meta'));\n\t\tdata.detail = new IconLabel(detailContainer, { supportHighlights: true, supportIcons: true, hoverDelegate: this.hoverDelegate });\n\t\tdata.toDisposeTemplate.add(data.detail);\n\n\t\t// Separator\n\t\tdata.separator = dom.append(data.entry, $('.quick-input-list-separator'));\n\n\t\t// Actions\n\t\tdata.actionBar = new ActionBar(data.entry, this.hoverDelegate ? { hoverDelegate: this.hoverDelegate } : undefined);\n\t\tdata.actionBar.domNode.classList.add('quick-input-list-entry-action-bar');\n\t\tdata.toDisposeTemplate.add(data.actionBar);\n\n\t\treturn data;\n\t}\n\n\tdisposeTemplate(data: IQuickInputItemTemplateData): void {\n\t\tdata.toDisposeElement.dispose();\n\t\tdata.toDisposeTemplate.dispose();\n\t}\n\n\tdisposeElement(_element: ITreeNode<IQuickPickElement, void>, _index: number, data: IQuickInputItemTemplateData): void {\n\t\tdata.toDisposeElement.clear();\n\t\tdata.actionBar.clear();\n\t}\n\n\t// TODO: only do the common stuff here and have a subclass handle their specific stuff\n\tabstract renderElement(node: ITreeNode<IQuickPickElement, void>, index: number, data: IQuickInputItemTemplateData): void;\n}\n\nclass QuickPickItemElementRenderer extends BaseQuickInputListRenderer<QuickPickItemElement> {\n\tstatic readonly ID = 'quickpickitem';\n\n\t// Follow what we do in the separator renderer\n\tprivate readonly _itemsWithSeparatorsFrequency = new Map<QuickPickItemElement, number>();\n\n\tconstructor(\n\t\thoverDelegate: IHoverDelegate | undefined,\n\t\t@IThemeService private readonly themeService: IThemeService,\n\t) {\n\t\tsuper(hoverDelegate);\n\t}\n\n\tget templateId() {\n\t\treturn QuickPickItemElementRenderer.ID;\n\t}\n\n\tprivate ensureCheckbox(element: QuickPickItemElement, data: IQuickInputItemTemplateData) {\n\t\tif (!element.hasCheckbox) {\n\t\t\tdata.checkbox.value?.domNode.remove();\n\t\t\tdata.checkbox.clear();\n\t\t\treturn;\n\t\t}\n\n\t\tlet checkbox = data.checkbox.value;\n\t\tif (!checkbox) {\n\t\t\tcheckbox = new Checkbox(element.saneLabel, element.checked, { ...defaultCheckboxStyles, size: 15 });\n\t\t\tdata.checkbox.value = checkbox;\n\t\t\tdata.outerLabel.prepend(checkbox.domNode);\n\t\t\t// Remove checkbox from tab order since tree items are navigable with arrow keys\n\t\t\t// This prevents the issue where pressing Space toggles both the tabbed checkbox and the focused item\n\t\t\tcheckbox.domNode.tabIndex = -1;\n\t\t} else {\n\t\t\tcheckbox.setTitle(element.saneLabel);\n\t\t}\n\n\t\tif (element.checkboxDisabled) {\n\t\t\tcheckbox.disable();\n\t\t} else {\n\t\t\tcheckbox.enable();\n\t\t}\n\n\t\tcheckbox.checked = element.checked;\n\t\tdata.toDisposeElement.add(element.onChecked(checked => checkbox.checked = checked));\n\t\tdata.toDisposeElement.add(checkbox.onChange(() => element.checked = checkbox.checked));\n\t}\n\n\trenderElement(node: ITreeNode<QuickPickItemElement, void>, index: number, data: IQuickInputItemTemplateData): void {\n\t\tconst element = node.element;\n\t\tdata.element = element;\n\t\telement.element = data.entry ?? undefined;\n\t\tconst mainItem: IQuickPickItem = element.item;\n\n\t\telement.element.classList.toggle('not-pickable', element.item.pickable === false);\n\n\t\tthis.ensureCheckbox(element, data);\n\n\t\tconst { labelHighlights, descriptionHighlights, detailHighlights } = element;\n\n\t\t// Icon\n\t\tif (mainItem.iconPath) {\n\t\t\tconst icon = isDark(this.themeService.getColorTheme().type) ? mainItem.iconPath.dark : (mainItem.iconPath.light ?? mainItem.iconPath.dark);\n\t\t\tconst iconUrl = URI.revive(icon);\n\t\t\tdata.icon.className = 'quick-input-list-icon';\n\t\t\tdata.icon.style.backgroundImage = cssJs.asCSSUrl(iconUrl);\n\t\t} else {\n\t\t\tdata.icon.style.backgroundImage = '';\n\t\t\tdata.icon.className = mainItem.iconClass ? `quick-input-list-icon ${mainItem.iconClass}` : '';\n\t\t}\n\n\t\t// Label\n\t\tlet descriptionTitle: IManagedHoverTooltipMarkdownString | undefined;\n\t\t// if we have a tooltip, that will be the hover,\n\t\t// with the saneDescription as fallback if it\n\t\t// is defined\n\t\tif (!element.saneTooltip && element.saneDescription) {\n\t\t\tdescriptionTitle = {\n\t\t\t\tmarkdown: {\n\t\t\t\t\tvalue: escape(element.saneDescription),\n\t\t\t\t\tsupportThemeIcons: true\n\t\t\t\t},\n\t\t\t\tmarkdownNotSupportedFallback: element.saneDescription\n\t\t\t};\n\t\t}\n\t\tconst options: IIconLabelValueOptions = {\n\t\t\tmatches: labelHighlights || [],\n\t\t\t// If we have a tooltip, we want that to be shown and not any other hover\n\t\t\tdescriptionTitle,\n\t\t\tdescriptionMatches: descriptionHighlights || [],\n\t\t\tlabelEscapeNewLines: true\n\t\t};\n\t\toptions.extraClasses = mainItem.iconClasses;\n\t\toptions.italic = mainItem.italic;\n\t\toptions.strikethrough = mainItem.strikethrough;\n\t\tdata.entry.classList.remove('quick-input-list-separator-as-item');\n\t\tdata.label.setLabel(element.saneLabel, element.saneDescription, options);\n\n\t\t// Keybinding\n\t\tdata.keybinding.set(mainItem.keybinding);\n\n\t\t// Detail\n\t\tif (element.saneDetail) {\n\t\t\tlet title: IManagedHoverTooltipMarkdownString | undefined;\n\t\t\t// If we have a tooltip, we want that to be shown and not any other hover\n\t\t\tif (!element.saneTooltip) {\n\t\t\t\ttitle = {\n\t\t\t\t\tmarkdown: {\n\t\t\t\t\t\tvalue: escape(element.saneDetail),\n\t\t\t\t\t\tsupportThemeIcons: true\n\t\t\t\t\t},\n\t\t\t\t\tmarkdownNotSupportedFallback: element.saneDetail\n\t\t\t\t};\n\t\t\t}\n\t\t\tdata.detail.element.style.display = '';\n\t\t\tdata.detail.setLabel(element.saneDetail, undefined, {\n\t\t\t\tmatches: detailHighlights,\n\t\t\t\ttitle,\n\t\t\t\tlabelEscapeNewLines: true\n\t\t\t});\n\t\t} else {\n\t\t\tdata.detail.element.style.display = 'none';\n\t\t}\n\n\t\t// Separator\n\t\tif (element.separator?.label) {\n\t\t\tdata.separator.textContent = element.separator.label;\n\t\t\tdata.separator.style.display = '';\n\t\t\tthis.addItemWithSeparator(element);\n\t\t} else {\n\t\t\tdata.separator.style.display = 'none';\n\t\t}\n\t\tdata.entry.classList.toggle('quick-input-list-separator-border', !!element.separator && element.childIndex !== 0);\n\n\t\t// Actions\n\t\tconst buttons = mainItem.buttons;\n\t\tif (buttons && buttons.length) {\n\t\t\tdata.actionBar.push(buttons.map((button, index) => quickInputButtonToAction(\n\t\t\t\tbutton,\n\t\t\t\t`id-${index}`,\n\t\t\t\t() => element.fireButtonTriggered({ button, item: element.item })\n\t\t\t)), { icon: true, label: false });\n\t\t\tdata.entry.classList.add('has-actions');\n\t\t} else {\n\t\t\tdata.entry.classList.remove('has-actions');\n\t\t}\n\t}\n\n\toverride disposeElement(element: ITreeNode<QuickPickItemElement, void>, _index: number, data: IQuickInputItemTemplateData): void {\n\t\tthis.removeItemWithSeparator(element.element);\n\t\tsuper.disposeElement(element, _index, data);\n\t}\n\n\tisItemWithSeparatorVisible(item: QuickPickItemElement): boolean {\n\t\treturn this._itemsWithSeparatorsFrequency.has(item);\n\t}\n\n\tprivate addItemWithSeparator(item: QuickPickItemElement): void {\n\t\tthis._itemsWithSeparatorsFrequency.set(item, (this._itemsWithSeparatorsFrequency.get(item) || 0) + 1);\n\t}\n\n\tprivate removeItemWithSeparator(item: QuickPickItemElement): void {\n\t\tconst frequency = this._itemsWithSeparatorsFrequency.get(item) || 0;\n\t\tif (frequency > 1) {\n\t\t\tthis._itemsWithSeparatorsFrequency.set(item, frequency - 1);\n\t\t} else {\n\t\t\tthis._itemsWithSeparatorsFrequency.delete(item);\n\t\t}\n\t}\n}\n\nclass QuickPickSeparatorElementRenderer extends BaseQuickInputListRenderer<QuickPickSeparatorElement> {\n\tstatic readonly ID = 'quickpickseparator';\n\n\t// This is a frequency map because sticky scroll re-uses the same renderer to render a second\n\t// instance of the same separator.\n\tprivate readonly _visibleSeparatorsFrequency = new Map<QuickPickSeparatorElement, number>();\n\n\tget templateId() {\n\t\treturn QuickPickSeparatorElementRenderer.ID;\n\t}\n\n\tget visibleSeparators(): QuickPickSeparatorElement[] {\n\t\treturn [...this._visibleSeparatorsFrequency.keys()];\n\t}\n\n\tisSeparatorVisible(separator: QuickPickSeparatorElement): boolean {\n\t\treturn this._visibleSeparatorsFrequency.has(separator);\n\t}\n\n\toverride renderElement(node: ITreeNode<QuickPickSeparatorElement, void>, index: number, data: IQuickInputItemTemplateData): void {\n\t\tconst element = node.element;\n\t\tdata.element = element;\n\t\telement.element = data.entry ?? undefined;\n\t\telement.element.classList.toggle('focus-inside', !!element.focusInsideSeparator);\n\t\tconst mainItem: IQuickPickSeparator = element.separator;\n\n\t\tconst { labelHighlights, descriptionHighlights } = element;\n\n\t\t// Icon\n\t\tdata.icon.style.backgroundImage = '';\n\t\tdata.icon.className = '';\n\n\t\t// Label\n\t\tlet descriptionTitle: IManagedHoverTooltipMarkdownString | undefined;\n\t\t// if we have a tooltip, that will be the hover,\n\t\t// with the saneDescription as fallback if it\n\t\t// is defined\n\t\tif (!element.saneTooltip && element.saneDescription) {\n\t\t\tdescriptionTitle = {\n\t\t\t\tmarkdown: {\n\t\t\t\t\tvalue: escape(element.saneDescription),\n\t\t\t\t\tsupportThemeIcons: true\n\t\t\t\t},\n\t\t\t\tmarkdownNotSupportedFallback: element.saneDescription\n\t\t\t};\n\t\t}\n\t\tconst options: IIconLabelValueOptions = {\n\t\t\tmatches: labelHighlights || [],\n\t\t\t// If we have a tooltip, we want that to be shown and not any other hover\n\t\t\tdescriptionTitle,\n\t\t\tdescriptionMatches: descriptionHighlights || [],\n\t\t\tlabelEscapeNewLines: true\n\t\t};\n\t\tdata.entry.classList.add('quick-input-list-separator-as-item');\n\t\tdata.label.setLabel(element.saneLabel, element.saneDescription, options);\n\n\t\t// Separator\n\t\tdata.separator.style.display = 'none';\n\t\tdata.entry.classList.add('quick-input-list-separator-border');\n\n\t\t// Actions\n\t\tconst buttons = mainItem.buttons;\n\t\tif (buttons && buttons.length) {\n\t\t\tdata.actionBar.push(buttons.map((button, index) => quickInputButtonToAction(\n\t\t\t\tbutton,\n\t\t\t\t`id-${index}`,\n\t\t\t\t() => element.fireSeparatorButtonTriggered({ button, separator: element.separator })\n\t\t\t)), { icon: true, label: false });\n\t\t\tdata.entry.classList.add('has-actions');\n\t\t} else {\n\t\t\tdata.entry.classList.remove('has-actions');\n\t\t}\n\n\t\tthis.addSeparator(element);\n\t}\n\n\toverride disposeElement(element: ITreeNode<QuickPickSeparatorElement, void>, _index: number, data: IQuickInputItemTemplateData): void {\n\t\tthis.removeSeparator(element.element);\n\t\tif (!this.isSeparatorVisible(element.element)) {\n\t\t\telement.element.element?.classList.remove('focus-inside');\n\t\t}\n\t\tsuper.disposeElement(element, _index, data);\n\t}\n\n\tprivate addSeparator(separator: QuickPickSeparatorElement): void {\n\t\tthis._visibleSeparatorsFrequency.set(separator, (this._visibleSeparatorsFrequency.get(separator) || 0) + 1);\n\t}\n\n\tprivate removeSeparator(separator: QuickPickSeparatorElement): void {\n\t\tconst frequency = this._visibleSeparatorsFrequency.get(separator) || 0;\n\t\tif (frequency > 1) {\n\t\t\tthis._visibleSeparatorsFrequency.set(separator, frequency - 1);\n\t\t} else {\n\t\t\tthis._visibleSeparatorsFrequency.delete(separator);\n\t\t}\n\t}\n}\n\nexport class QuickInputList extends Disposable {\n\n\t//#region QuickInputList Events\n\n\tprivate readonly _onKeyDown = new Emitter<StandardKeyboardEvent>();\n\n\tprivate readonly _onLeave = new Emitter<void>();\n\t/**\n\t * Event that is fired when the tree would no longer have focus.\n\t*/\n\treadonly onLeave: Event<void> = this._onLeave.event;\n\n\tprivate readonly _visibleCountObservable = observableValue('VisibleCount', 0);\n\treadonly onChangedVisibleCount: Event<number> = Event.fromObservable(this._visibleCountObservable, this._store);\n\n\tprivate readonly _allVisibleCheckedObservable = observableValue('AllVisibleChecked', false);\n\treadonly onChangedAllVisibleChecked: Event<boolean> = Event.fromObservable(this._allVisibleCheckedObservable, this._store);\n\n\tprivate readonly _checkedCountObservable = observableValue('CheckedCount', 0);\n\treadonly onChangedCheckedCount: Event<number> = Event.fromObservable(this._checkedCountObservable, this._store);\n\n\tprivate readonly _checkedElementsObservable = observableValueOpts({ equalsFn: equals }, new Array<IQuickPickItem>());\n\treadonly onChangedCheckedElements: Event<IQuickPickItem[]> = Event.fromObservable(this._checkedElementsObservable, this._store);\n\n\tprivate readonly _onButtonTriggered = new Emitter<IQuickPickItemButtonEvent<IQuickPickItem>>();\n\tonButtonTriggered = this._onButtonTriggered.event;\n\n\tprivate readonly _onSeparatorButtonTriggered = new Emitter<IQuickPickSeparatorButtonEvent>();\n\tonSeparatorButtonTriggered = this._onSeparatorButtonTriggered.event;\n\n\tprivate readonly _elementChecked = new Emitter<{ element: IQuickPickElement; checked: boolean }>();\n\tprivate readonly _elementCheckedEventBufferer = new EventBufferer();\n\n\t//#endregion\n\n\tprivate _hasCheckboxes = false;\n\n\tprivate readonly _container: HTMLElement;\n\tprivate readonly _tree: WorkbenchObjectTree<IQuickPickElement, void>;\n\tprivate readonly _separatorRenderer: QuickPickSeparatorElementRenderer;\n\tprivate readonly _itemRenderer: QuickPickItemElementRenderer;\n\tprivate _inputElements = new Array<QuickPickItem>();\n\tprivate _elementTree = new Array<IQuickPickElement>();\n\tprivate _itemElements = new Array<QuickPickItemElement>();\n\t// Elements that apply to the current set of elements\n\tprivate readonly _elementDisposable = this._register(new DisposableStore());\n\tprivate _lastHover: IHoverWidget | undefined;\n\tprivate _lastQueryString: string | undefined;\n\n\tconstructor(\n\t\tprivate parent: HTMLElement,\n\t\tprivate hoverDelegate: IHoverDelegate,\n\t\tprivate linkOpenerDelegate: (content: string) => void,\n\t\tid: string,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@IAccessibilityService private readonly accessibilityService: IAccessibilityService\n\t) {\n\t\tsuper();\n\t\tthis._container = dom.append(this.parent, $('.quick-input-list'));\n\t\tthis._separatorRenderer = new QuickPickSeparatorElementRenderer(hoverDelegate);\n\t\tthis._itemRenderer = instantiationService.createInstance(QuickPickItemElementRenderer, hoverDelegate);\n\t\tthis._tree = this._register(instantiationService.createInstance(\n\t\t\tWorkbenchObjectTree<IQuickPickElement, void>,\n\t\t\t'QuickInput',\n\t\t\tthis._container,\n\t\t\tnew QuickInputItemDelegate(),\n\t\t\t[this._itemRenderer, this._separatorRenderer],\n\t\t\t{\n\t\t\t\tfilter: {\n\t\t\t\t\tfilter(element) {\n\t\t\t\t\t\treturn element.hidden\n\t\t\t\t\t\t\t? TreeVisibility.Hidden\n\t\t\t\t\t\t\t: element instanceof QuickPickSeparatorElement\n\t\t\t\t\t\t\t\t? TreeVisibility.Recurse\n\t\t\t\t\t\t\t\t: TreeVisibility.Visible;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsorter: {\n\t\t\t\t\tcompare: (element, otherElement) => {\n\t\t\t\t\t\tif (!this.sortByLabel || !this._lastQueryString) {\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst normalizedSearchValue = this._lastQueryString.toLowerCase();\n\t\t\t\t\t\treturn compareEntries(element, otherElement, normalizedSearchValue);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\taccessibilityProvider: new QuickInputAccessibilityProvider(),\n\t\t\t\tsetRowLineHeight: false,\n\t\t\t\tmultipleSelectionSupport: false,\n\t\t\t\thideTwistiesOfChildlessElements: true,\n\t\t\t\trenderIndentGuides: RenderIndentGuides.None,\n\t\t\t\tfindWidgetEnabled: false,\n\t\t\t\tindent: 0,\n\t\t\t\thorizontalScrolling: false,\n\t\t\t\tallowNonCollapsibleParents: true,\n\t\t\t\talwaysConsumeMouseWheel: true\n\t\t\t}\n\t\t));\n\t\tthis._tree.getHTMLElement().id = id;\n\t\tthis._registerListeners();\n\t}\n\n\t//#region public getters/setters\n\n\t@memoize\n\tget onDidChangeFocus() {\n\t\treturn Event.map(\n\t\t\tthis._tree.onDidChangeFocus,\n\t\t\te => e.elements.filter((e): e is QuickPickItemElement => e instanceof QuickPickItemElement).map(e => e.item),\n\t\t\tthis._store\n\t\t);\n\t}\n\n\t@memoize\n\tget onDidChangeSelection() {\n\t\treturn Event.map(\n\t\t\tthis._tree.onDidChangeSelection,\n\t\t\te => ({\n\t\t\t\titems: e.elements.filter((e): e is QuickPickItemElement => e instanceof QuickPickItemElement).map(e => e.item),\n\t\t\t\tevent: e.browserEvent\n\t\t\t}),\n\t\t\tthis._store\n\t\t);\n\t}\n\n\tget displayed() {\n\t\treturn this._container.style.display !== 'none';\n\t}\n\n\tset displayed(value: boolean) {\n\t\tthis._container.style.display = value ? '' : 'none';\n\t}\n\n\tget scrollTop() {\n\t\treturn this._tree.scrollTop;\n\t}\n\n\tset scrollTop(scrollTop: number) {\n\t\tthis._tree.scrollTop = scrollTop;\n\t}\n\n\tget ariaLabel() {\n\t\treturn this._tree.ariaLabel;\n\t}\n\n\tset ariaLabel(label: string | null) {\n\t\tthis._tree.ariaLabel = label ?? '';\n\t}\n\n\tset enabled(value: boolean) {\n\t\tthis._tree.getHTMLElement().style.pointerEvents = value ? '' : 'none';\n\t}\n\n\tprivate _matchOnDescription = false;\n\tget matchOnDescription() {\n\t\treturn this._matchOnDescription;\n\t}\n\tset matchOnDescription(value: boolean) {\n\t\tthis._matchOnDescription = value;\n\t}\n\n\tprivate _matchOnDetail = false;\n\tget matchOnDetail() {\n\t\treturn this._matchOnDetail;\n\t}\n\tset matchOnDetail(value: boolean) {\n\t\tthis._matchOnDetail = value;\n\t}\n\n\tprivate _matchOnLabel = true;\n\tget matchOnLabel() {\n\t\treturn this._matchOnLabel;\n\t}\n\tset matchOnLabel(value: boolean) {\n\t\tthis._matchOnLabel = value;\n\t}\n\n\tprivate _matchOnLabelMode: 'fuzzy' | 'contiguous' = 'fuzzy';\n\tget matchOnLabelMode() {\n\t\treturn this._matchOnLabelMode;\n\t}\n\tset matchOnLabelMode(value: 'fuzzy' | 'contiguous') {\n\t\tthis._matchOnLabelMode = value;\n\t}\n\n\tprivate _sortByLabel = true;\n\tget sortByLabel() {\n\t\treturn this._sortByLabel;\n\t}\n\tset sortByLabel(value: boolean) {\n\t\tthis._sortByLabel = value;\n\t}\n\n\tprivate _shouldLoop = true;\n\tget shouldLoop() {\n\t\treturn this._shouldLoop;\n\t}\n\tset shouldLoop(value: boolean) {\n\t\tthis._shouldLoop = value;\n\t}\n\n\t//#endregion\n\n\t//#region register listeners\n\n\tprivate _registerListeners() {\n\t\tthis._registerOnKeyDown();\n\t\tthis._registerOnContainerClick();\n\t\tthis._registerOnMouseMiddleClick();\n\t\tthis._registerOnTreeModelChanged();\n\t\tthis._registerOnElementChecked();\n\t\tthis._registerOnContextMenu();\n\t\tthis._registerHoverListeners();\n\t\tthis._registerSelectionChangeListener();\n\t\tthis._registerSeparatorActionShowingListeners();\n\t}\n\n\tprivate _registerOnKeyDown() {\n\t\t// TODO: Should this be added at a higher level?\n\t\tthis._register(this._tree.onKeyDown(e => {\n\t\t\tconst event = new StandardKeyboardEvent(e);\n\t\t\tswitch (event.keyCode) {\n\t\t\t\tcase KeyCode.Space:\n\t\t\t\t\tthis.toggleCheckbox();\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis._onKeyDown.fire(event);\n\t\t}));\n\t}\n\n\tprivate _registerOnContainerClick() {\n\t\tthis._register(dom.addDisposableListener(this._container, dom.EventType.CLICK, e => {\n\t\t\tif (e.x || e.y) { // Avoid 'click' triggered by 'space' on checkbox.\n\t\t\t\tthis._onLeave.fire();\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate _registerOnMouseMiddleClick() {\n\t\tthis._register(dom.addDisposableListener(this._container, dom.EventType.AUXCLICK, e => {\n\t\t\tif (e.button === 1) {\n\t\t\t\tthis._onLeave.fire();\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate _registerOnTreeModelChanged() {\n\t\tthis._register(this._tree.onDidChangeModel(() => {\n\t\t\tconst visibleCount = this._itemElements.filter(e => !e.hidden).length;\n\t\t\tthis._visibleCountObservable.set(visibleCount, undefined);\n\t\t\tif (this._hasCheckboxes) {\n\t\t\t\tthis._updateCheckedObservables();\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate _registerOnElementChecked() {\n\t\t// Only fire the last event when buffered\n\t\tthis._register(this._elementCheckedEventBufferer.wrapEvent(this._elementChecked.event, (_, e) => e)(_ => this._updateCheckedObservables()));\n\t}\n\n\tprivate _registerOnContextMenu() {\n\t\tthis._register(this._tree.onContextMenu(e => {\n\t\t\tif (e.element) {\n\t\t\t\te.browserEvent.preventDefault();\n\n\t\t\t\t// we want to treat a context menu event as\n\t\t\t\t// a gesture to open the item at the index\n\t\t\t\t// since we do not have any context menu\n\t\t\t\t// this enables for example macOS to Ctrl-\n\t\t\t\t// click on an item to open it.\n\t\t\t\tthis._tree.setSelection([e.element]);\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate _registerHoverListeners() {\n\t\tconst delayer = this._register(new ThrottledDelayer(typeof this.hoverDelegate.delay === 'function' ? this.hoverDelegate.delay() : this.hoverDelegate.delay));\n\t\tthis._register(this._tree.onMouseOver(async e => {\n\t\t\t// If we hover over an anchor element, we don't want to show the hover because\n\t\t\t// the anchor may have a tooltip that we want to show instead.\n\t\t\tif (dom.isHTMLAnchorElement(e.browserEvent.target)) {\n\t\t\t\tdelayer.cancel();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (\n\t\t\t\t// anchors are an exception as called out above so we skip them here\n\t\t\t\t!(dom.isHTMLAnchorElement(e.browserEvent.relatedTarget)) &&\n\t\t\t\t// check if the mouse is still over the same element\n\t\t\t\tdom.isAncestor(e.browserEvent.relatedTarget as Node, e.element?.element as Node)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait delayer.trigger(async () => {\n\t\t\t\t\tif (e.element instanceof QuickPickItemElement) {\n\t\t\t\t\t\tthis.showHover(e.element);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\t// Ignore cancellation errors due to mouse out\n\t\t\t\tif (!isCancellationError(e)) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._tree.onMouseOut(e => {\n\t\t\t// onMouseOut triggers every time a new element has been moused over\n\t\t\t// even if it's on the same list item. We only want one event, so we\n\t\t\t// check if the mouse is still over the same element.\n\t\t\tif (dom.isAncestor(e.browserEvent.relatedTarget as Node, e.element?.element as Node)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdelayer.cancel();\n\t\t}));\n\t}\n\n\t/**\n\t * Register's focus change and mouse events so that we can track when items inside of a\n\t * separator's section are focused or hovered so that we can display the separator's actions\n\t */\n\tprivate _registerSeparatorActionShowingListeners() {\n\t\tthis._register(this._tree.onDidChangeFocus(e => {\n\t\t\tconst parent = e.elements[0]\n\t\t\t\t? this._tree.getParentElement(e.elements[0]) as QuickPickSeparatorElement\n\t\t\t\t// treat null as focus lost and when we have no separators\n\t\t\t\t: null;\n\t\t\tfor (const separator of this._separatorRenderer.visibleSeparators) {\n\t\t\t\tconst value = separator === parent;\n\t\t\t\t// get bitness of ACTIVE_ITEM and check if it changed\n\t\t\t\tconst currentActive = !!(separator.focusInsideSeparator & QuickPickSeparatorFocusReason.ACTIVE_ITEM);\n\t\t\t\tif (currentActive !== value) {\n\t\t\t\t\tif (value) {\n\t\t\t\t\t\tseparator.focusInsideSeparator |= QuickPickSeparatorFocusReason.ACTIVE_ITEM;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tseparator.focusInsideSeparator &= ~QuickPickSeparatorFocusReason.ACTIVE_ITEM;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._tree.rerender(separator);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._tree.onMouseOver(e => {\n\t\t\tconst parent = e.element\n\t\t\t\t? this._tree.getParentElement(e.element) as QuickPickSeparatorElement\n\t\t\t\t: null;\n\t\t\tfor (const separator of this._separatorRenderer.visibleSeparators) {\n\t\t\t\tif (separator !== parent) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst currentMouse = !!(separator.focusInsideSeparator & QuickPickSeparatorFocusReason.MOUSE_HOVER);\n\t\t\t\tif (!currentMouse) {\n\t\t\t\t\tseparator.focusInsideSeparator |= QuickPickSeparatorFocusReason.MOUSE_HOVER;\n\t\t\t\t\tthis._tree.rerender(separator);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._tree.onMouseOut(e => {\n\t\t\tconst parent = e.element\n\t\t\t\t? this._tree.getParentElement(e.element) as QuickPickSeparatorElement\n\t\t\t\t: null;\n\t\t\tfor (const separator of this._separatorRenderer.visibleSeparators) {\n\t\t\t\tif (separator !== parent) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst currentMouse = !!(separator.focusInsideSeparator & QuickPickSeparatorFocusReason.MOUSE_HOVER);\n\t\t\t\tif (currentMouse) {\n\t\t\t\t\tseparator.focusInsideSeparator &= ~QuickPickSeparatorFocusReason.MOUSE_HOVER;\n\t\t\t\t\tthis._tree.rerender(separator);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate _registerSelectionChangeListener() {\n\t\t// When the user selects a separator, the separator will move to the top and focus will be\n\t\t// set to the first element after the separator.\n\t\tthis._register(this._tree.onDidChangeSelection(e => {\n\t\t\tconst elementsWithoutSeparators = e.elements.filter((e): e is QuickPickItemElement => e instanceof QuickPickItemElement);\n\t\t\tif (elementsWithoutSeparators.length !== e.elements.length) {\n\t\t\t\tif (e.elements.length === 1 && e.elements[0] instanceof QuickPickSeparatorElement) {\n\t\t\t\t\tthis._tree.setFocus([e.elements[0].children[0]]);\n\t\t\t\t\tthis._tree.reveal(e.elements[0], 0);\n\t\t\t\t}\n\t\t\t\tthis._tree.setSelection(elementsWithoutSeparators);\n\t\t\t}\n\t\t}));\n\t}\n\n\t//#endregion\n\n\t//#region public methods\n\n\tsetAllVisibleChecked(checked: boolean) {\n\t\tthis._elementCheckedEventBufferer.bufferEvents(() => {\n\t\t\tthis._itemElements.forEach(element => {\n\t\t\t\tif (!element.hidden && !element.checkboxDisabled && element.item.pickable !== false) {\n\t\t\t\t\t// Would fire an event if we didn't beffer the events\n\t\t\t\t\telement.checked = checked;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tsetElements(inputElements: QuickPickItem[]): void {\n\t\tthis._elementDisposable.clear();\n\t\tthis._lastQueryString = undefined;\n\t\tthis._inputElements = inputElements;\n\t\tthis._hasCheckboxes = this.parent.classList.contains('show-checkboxes');\n\t\tlet currentSeparatorElement: QuickPickSeparatorElement | undefined;\n\t\tthis._itemElements = new Array<QuickPickItemElement>();\n\t\tthis._elementTree = inputElements.reduce((result, item, index) => {\n\t\t\tlet element: IQuickPickElement;\n\t\t\tif (item.type === 'separator') {\n\t\t\t\tif (!item.buttons) {\n\t\t\t\t\t// This separator will be rendered as a part of the list item\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tcurrentSeparatorElement = new QuickPickSeparatorElement(\n\t\t\t\t\tindex,\n\t\t\t\t\te => this._onSeparatorButtonTriggered.fire(e),\n\t\t\t\t\titem\n\t\t\t\t);\n\t\t\t\telement = currentSeparatorElement;\n\t\t\t} else {\n\t\t\t\tconst previous = index > 0 ? inputElements[index - 1] : undefined;\n\t\t\t\tlet separator: IQuickPickSeparator | undefined;\n\t\t\t\tif (previous && previous.type === 'separator' && !previous.buttons) {\n\t\t\t\t\tseparator = previous;\n\t\t\t\t}\n\t\t\t\tconst qpi = new QuickPickItemElement(\n\t\t\t\t\tindex,\n\t\t\t\t\tcurrentSeparatorElement?.children\n\t\t\t\t\t\t? currentSeparatorElement.children.length\n\t\t\t\t\t\t: index,\n\t\t\t\t\tthis._hasCheckboxes && item.pickable !== false,\n\t\t\t\t\te => this._onButtonTriggered.fire(e),\n\t\t\t\t\tthis._elementChecked,\n\t\t\t\t\titem,\n\t\t\t\t\tseparator,\n\t\t\t\t);\n\t\t\t\tthis._itemElements.push(qpi);\n\n\t\t\t\tif (currentSeparatorElement) {\n\t\t\t\t\tcurrentSeparatorElement.children.push(qpi);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\telement = qpi;\n\t\t\t}\n\n\t\t\tresult.push(element);\n\t\t\treturn result;\n\t\t}, new Array<IQuickPickElement>());\n\n\t\tthis._setElementsToTree(this._elementTree);\n\n\t\t// Accessibility hack, unfortunately on next tick\n\t\t// https://github.com/microsoft/vscode/issues/211976\n\t\tif (this.accessibilityService.isScreenReaderOptimized()) {\n\t\t\tsetTimeout(() => {\n\t\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\t\tconst focusedElement = this._tree.getHTMLElement().querySelector(`.monaco-list-row.focused`);\n\t\t\t\tconst parent = focusedElement?.parentNode;\n\t\t\t\tif (focusedElement && parent) {\n\t\t\t\t\tconst nextSibling = focusedElement.nextSibling;\n\t\t\t\t\tfocusedElement.remove();\n\t\t\t\t\tparent.insertBefore(focusedElement, nextSibling);\n\t\t\t\t}\n\t\t\t}, 0);\n\t\t}\n\t}\n\n\tsetFocusedElements(items: IQuickPickItem[]) {\n\t\tconst elements = items.map(item => this._itemElements.find(e => e.item === item))\n\t\t\t.filter((e): e is QuickPickItemElement => !!e)\n\t\t\t.filter(e => !e.hidden);\n\t\tthis._tree.setFocus(elements);\n\t\tif (items.length > 0) {\n\t\t\tconst focused = this._tree.getFocus()[0];\n\t\t\tif (focused) {\n\t\t\t\tthis._tree.reveal(focused);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetActiveDescendant() {\n\t\treturn this._tree.getHTMLElement().getAttribute('aria-activedescendant');\n\t}\n\n\tsetSelectedElements(items: IQuickPickItem[]) {\n\t\tconst elements = items.map(item => this._itemElements.find(e => e.item === item))\n\t\t\t.filter((e): e is QuickPickItemElement => !!e);\n\t\tthis._tree.setSelection(elements);\n\t}\n\n\tgetCheckedElements() {\n\t\treturn this._itemElements.filter(e => e.checked)\n\t\t\t.map(e => e.item);\n\t}\n\n\tsetCheckedElements(items: IQuickPickItem[]) {\n\t\tthis._elementCheckedEventBufferer.bufferEvents(() => {\n\t\t\tconst checked = new Set();\n\t\t\tfor (const item of items) {\n\t\t\t\tchecked.add(item);\n\t\t\t}\n\t\t\tfor (const element of this._itemElements) {\n\t\t\t\t// Would fire an event if we didn't beffer the events\n\t\t\t\telement.checked = checked.has(element.item);\n\t\t\t}\n\t\t});\n\t}\n\n\tfocus(what: QuickPickFocus): void {\n\t\tif (!this._itemElements.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (what === QuickPickFocus.Second && this._itemElements.length < 2) {\n\t\t\twhat = QuickPickFocus.First;\n\t\t}\n\n\t\tswitch (what) {\n\t\t\tcase QuickPickFocus.First:\n\t\t\t\tthis._tree.scrollTop = 0;\n\t\t\t\tthis._tree.focusFirst(undefined, (e) => e.element instanceof QuickPickItemElement);\n\t\t\t\tbreak;\n\t\t\tcase QuickPickFocus.Second: {\n\t\t\t\tthis._tree.scrollTop = 0;\n\t\t\t\tlet isSecondItem = false;\n\t\t\t\tthis._tree.focusFirst(undefined, (e) => {\n\t\t\t\t\tif (!(e.element instanceof QuickPickItemElement)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (isSecondItem) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tisSecondItem = !isSecondItem;\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase QuickPickFocus.Last:\n\t\t\t\tthis._tree.scrollTop = this._tree.scrollHeight;\n\t\t\t\tthis._tree.focusLast(undefined, (e) => e.element instanceof QuickPickItemElement);\n\t\t\t\tbreak;\n\t\t\tcase QuickPickFocus.Next: {\n\t\t\t\tconst prevFocus = this._tree.getFocus();\n\t\t\t\tthis._tree.focusNext(undefined, this._shouldLoop, undefined, (e) => {\n\t\t\t\t\tif (!(e.element instanceof QuickPickItemElement)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tthis._tree.reveal(e.element);\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t\tconst currentFocus = this._tree.getFocus();\n\t\t\t\tif (prevFocus.length && prevFocus[0] === currentFocus[0]) {\n\t\t\t\t\tthis._onLeave.fire();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase QuickPickFocus.Previous: {\n\t\t\t\tconst prevFocus = this._tree.getFocus();\n\t\t\t\tthis._tree.focusPrevious(undefined, this._shouldLoop, undefined, (e) => {\n\t\t\t\t\tif (!(e.element instanceof QuickPickItemElement)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tconst parent = this._tree.getParentElement(e.element);\n\t\t\t\t\tif (parent === null || (parent as QuickPickSeparatorElement).children[0] !== e.element) {\n\t\t\t\t\t\tthis._tree.reveal(e.element);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Only if we are the first child of a separator do we reveal the separator\n\t\t\t\t\t\tthis._tree.reveal(parent);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t\tconst currentFocus = this._tree.getFocus();\n\t\t\t\tif (prevFocus.length && prevFocus[0] === currentFocus[0]) {\n\t\t\t\t\tthis._onLeave.fire();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase QuickPickFocus.NextPage:\n\t\t\t\tthis._tree.focusNextPage(undefined, (e) => {\n\t\t\t\t\tif (!(e.element instanceof QuickPickItemElement)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tthis._tree.reveal(e.element);\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase QuickPickFocus.PreviousPage:\n\t\t\t\tthis._tree.focusPreviousPage(undefined, (e) => {\n\t\t\t\t\tif (!(e.element instanceof QuickPickItemElement)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tconst parent = this._tree.getParentElement(e.element);\n\t\t\t\t\tif (parent === null || (parent as QuickPickSeparatorElement).children[0] !== e.element) {\n\t\t\t\t\t\tthis._tree.reveal(e.element);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._tree.reveal(parent);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase QuickPickFocus.NextSeparator: {\n\t\t\t\tlet foundSeparatorAsItem = false;\n\t\t\t\tconst before = this._tree.getFocus()[0];\n\t\t\t\tthis._tree.focusNext(undefined, true, undefined, (e) => {\n\t\t\t\t\tif (foundSeparatorAsItem) {\n\t\t\t\t\t\t// This should be the index right after the separator so it\n\t\t\t\t\t\t// is the item we want to focus.\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (e.element instanceof QuickPickSeparatorElement) {\n\t\t\t\t\t\tfoundSeparatorAsItem = true;\n\t\t\t\t\t\t// If the separator is visible, then we should just reveal its first child so it's not as jarring.\n\t\t\t\t\t\tif (this._separatorRenderer.isSeparatorVisible(e.element)) {\n\t\t\t\t\t\t\tthis._tree.reveal(e.element.children[0]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// If the separator is not visible, then we should\n\t\t\t\t\t\t\t// push it up to the top of the list.\n\t\t\t\t\t\t\tthis._tree.reveal(e.element, 0);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (e.element instanceof QuickPickItemElement) {\n\t\t\t\t\t\tif (e.element.separator) {\n\t\t\t\t\t\t\tif (this._itemRenderer.isItemWithSeparatorVisible(e.element)) {\n\t\t\t\t\t\t\t\tthis._tree.reveal(e.element);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._tree.reveal(e.element, 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} else if (e.element === this._elementTree[0]) {\n\t\t\t\t\t\t\t// We should stop at the first item in the list if it's a regular item.\n\t\t\t\t\t\t\tthis._tree.reveal(e.element, 0);\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tconst after = this._tree.getFocus()[0];\n\t\t\t\tif (before === after) {\n\t\t\t\t\t// If we didn't move, then we should just move to the end\n\t\t\t\t\t// of the list.\n\t\t\t\t\tthis._tree.scrollTop = this._tree.scrollHeight;\n\t\t\t\t\tthis._tree.focusLast(undefined, (e) => e.element instanceof QuickPickItemElement);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase QuickPickFocus.PreviousSeparator: {\n\t\t\t\tlet focusElement: IQuickPickElement | undefined;\n\t\t\t\t// If we are already sitting on an inline separator, then we\n\t\t\t\t// have already found the _current_ separator and need to\n\t\t\t\t// move to the previous one.\n\t\t\t\tlet foundSeparator = !!this._tree.getFocus()[0]?.separator;\n\t\t\t\tthis._tree.focusPrevious(undefined, true, undefined, (e) => {\n\t\t\t\t\tif (e.element instanceof QuickPickSeparatorElement) {\n\t\t\t\t\t\tif (foundSeparator) {\n\t\t\t\t\t\t\tif (!focusElement) {\n\t\t\t\t\t\t\t\tif (this._separatorRenderer.isSeparatorVisible(e.element)) {\n\t\t\t\t\t\t\t\t\tthis._tree.reveal(e.element);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis._tree.reveal(e.element, 0);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfocusElement = e.element.children[0];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfoundSeparator = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (e.element instanceof QuickPickItemElement) {\n\t\t\t\t\t\tif (!focusElement) {\n\t\t\t\t\t\t\tif (e.element.separator) {\n\t\t\t\t\t\t\t\tif (this._itemRenderer.isItemWithSeparatorVisible(e.element)) {\n\t\t\t\t\t\t\t\t\tthis._tree.reveal(e.element);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis._tree.reveal(e.element, 0);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tfocusElement = e.element;\n\t\t\t\t\t\t\t} else if (e.element === this._elementTree[0]) {\n\t\t\t\t\t\t\t\t// We should stop at the first item in the list if it's a regular item.\n\t\t\t\t\t\t\t\tthis._tree.reveal(e.element, 0);\n\t\t\t\t\t\t\t\treturn true;\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\treturn false;\n\t\t\t\t});\n\t\t\t\tif (focusElement) {\n\t\t\t\t\tthis._tree.setFocus([focusElement]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tclearFocus() {\n\t\tthis._tree.setFocus([]);\n\t}\n\n\tdomFocus() {\n\t\tthis._tree.domFocus();\n\t}\n\n\tlayout(maxHeight?: number): void {\n\t\tthis._tree.getHTMLElement().style.maxHeight = maxHeight ? `${\n\t\t\t// Make sure height aligns with list item heights\n\t\t\tMath.floor(maxHeight / 44) * 44\n\t\t\t// Add some extra height so that it's clear there's more to scroll\n\t\t\t+ 6\n\t\t\t}px` : '';\n\t\tthis._tree.layout();\n\t}\n\n\tfilter(query: string): boolean {\n\t\tthis._lastQueryString = query;\n\t\tif (!(this._sortByLabel || this._matchOnLabel || this._matchOnDescription || this._matchOnDetail)) {\n\t\t\tthis._tree.layout();\n\t\t\treturn false;\n\t\t}\n\n\t\tconst queryWithWhitespace = query;\n\t\tquery = query.trim();\n\n\t\t// Reset filtering\n\t\tif (!query || !(this.matchOnLabel || this.matchOnDescription || this.matchOnDetail)) {\n\t\t\tthis._itemElements.forEach(element => {\n\t\t\t\telement.labelHighlights = undefined;\n\t\t\t\telement.descriptionHighlights = undefined;\n\t\t\t\telement.detailHighlights = undefined;\n\t\t\t\telement.hidden = false;\n\t\t\t\tconst previous = element.index && this._inputElements[element.index - 1];\n\t\t\t\tif (element.item) {\n\t\t\t\t\telement.separator = previous && previous.type === 'separator' && !previous.buttons ? previous : undefined;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Filter by value (since we support icons in labels, use $(..) aware fuzzy matching)\n\t\telse {\n\t\t\tlet currentSeparator: IQuickPickSeparator | undefined;\n\t\t\tthis._itemElements.forEach(element => {\n\t\t\t\tlet labelHighlights: IMatch[] | undefined;\n\t\t\t\tif (this.matchOnLabelMode === 'fuzzy') {\n\t\t\t\t\tlabelHighlights = this.matchOnLabel ? matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneLabel)) ?? undefined : undefined;\n\t\t\t\t} else {\n\t\t\t\t\tlabelHighlights = this.matchOnLabel ? matchesContiguousIconAware(queryWithWhitespace, parseLabelWithIcons(element.saneLabel)) ?? undefined : undefined;\n\t\t\t\t}\n\t\t\t\tconst descriptionHighlights = this.matchOnDescription ? matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneDescription || '')) ?? undefined : undefined;\n\t\t\t\tconst detailHighlights = this.matchOnDetail ? matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneDetail || '')) ?? undefined : undefined;\n\n\t\t\t\tif (labelHighlights || descriptionHighlights || detailHighlights) {\n\t\t\t\t\telement.labelHighlights = labelHighlights;\n\t\t\t\t\telement.descriptionHighlights = descriptionHighlights;\n\t\t\t\t\telement.detailHighlights = detailHighlights;\n\t\t\t\t\telement.hidden = false;\n\t\t\t\t} else {\n\t\t\t\t\telement.labelHighlights = undefined;\n\t\t\t\t\telement.descriptionHighlights = undefined;\n\t\t\t\t\telement.detailHighlights = undefined;\n\t\t\t\t\telement.hidden = element.item ? !element.item.alwaysShow : true;\n\t\t\t\t}\n\n\t\t\t\t// Ensure separators are filtered out first before deciding if we need to bring them back\n\t\t\t\tif (element.item) {\n\t\t\t\t\telement.separator = undefined;\n\t\t\t\t} else if (element.separator) {\n\t\t\t\t\telement.hidden = true;\n\t\t\t\t}\n\n\t\t\t\t// we can show the separator unless the list gets sorted by match\n\t\t\t\tif (!this.sortByLabel) {\n\t\t\t\t\tconst previous = element.index && this._inputElements[element.index - 1] || undefined;\n\t\t\t\t\tif (previous?.type === 'separator' && !previous.buttons) {\n\t\t\t\t\t\tcurrentSeparator = previous;\n\t\t\t\t\t}\n\t\t\t\t\tif (currentSeparator && !element.hidden) {\n\t\t\t\t\t\telement.separator = currentSeparator;\n\t\t\t\t\t\tcurrentSeparator = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis._setElementsToTree(this._sortByLabel && query\n\t\t\t// We don't render any separators if we're sorting so just render the elements\n\t\t\t? this._itemElements\n\t\t\t// Render the full tree\n\t\t\t: this._elementTree\n\t\t);\n\t\tthis._tree.layout();\n\t\treturn true;\n\t}\n\n\ttoggleCheckbox() {\n\t\tthis._elementCheckedEventBufferer.bufferEvents(() => {\n\t\t\tconst elements = this._tree.getFocus().filter((e): e is QuickPickItemElement => e instanceof QuickPickItemElement);\n\t\t\tconst allChecked = this._allVisibleChecked(elements);\n\t\t\tfor (const element of elements) {\n\t\t\t\tif (!element.checkboxDisabled) {\n\t\t\t\t\t// Would fire an event if we didn't have the flag set\n\t\t\t\t\telement.checked = !allChecked;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tstyle(styles: IListStyles) {\n\t\tthis._tree.style(styles);\n\t}\n\n\ttoggleHover() {\n\t\tconst focused: IQuickPickElement | null = this._tree.getFocus()[0];\n\t\tif (!focused?.saneTooltip || !(focused instanceof QuickPickItemElement)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// if there's a hover already, hide it (toggle off)\n\t\tif (this._lastHover && !this._lastHover.isDisposed) {\n\t\t\tthis._lastHover.dispose();\n\t\t\treturn;\n\t\t}\n\n\t\t// If there is no hover, show it (toggle on)\n\t\tthis.showHover(focused);\n\t\tconst store = new DisposableStore();\n\t\tstore.add(this._tree.onDidChangeFocus(e => {\n\t\t\tif (e.elements[0] instanceof QuickPickItemElement) {\n\t\t\t\tthis.showHover(e.elements[0]);\n\t\t\t}\n\t\t}));\n\t\tif (this._lastHover) {\n\t\t\tstore.add(this._lastHover);\n\t\t}\n\t\tthis._elementDisposable.add(store);\n\t}\n\n\t//#endregion\n\n\t//#region private methods\n\n\tprivate _setElementsToTree(elements: IQuickPickElement[]) {\n\t\tconst treeElements = new Array<IObjectTreeElement<IQuickPickElement>>();\n\t\tfor (const element of elements) {\n\t\t\tif (element instanceof QuickPickSeparatorElement) {\n\t\t\t\ttreeElements.push({\n\t\t\t\t\telement,\n\t\t\t\t\tcollapsible: false,\n\t\t\t\t\tcollapsed: false,\n\t\t\t\t\tchildren: element.children.map(e => ({\n\t\t\t\t\t\telement: e,\n\t\t\t\t\t\tcollapsible: false,\n\t\t\t\t\t\tcollapsed: false,\n\t\t\t\t\t})),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttreeElements.push({\n\t\t\t\t\telement,\n\t\t\t\t\tcollapsible: false,\n\t\t\t\t\tcollapsed: false,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis._tree.setChildren(null, treeElements);\n\t}\n\n\tprivate _allVisibleChecked(elements: QuickPickItemElement[], whenNoneVisible = true) {\n\t\tfor (let i = 0, n = elements.length; i < n; i++) {\n\t\t\tconst element = elements[i];\n\t\t\tif (!element.hidden && element.item.pickable !== false) {\n\t\t\t\tif (!element.checked) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\twhenNoneVisible = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn whenNoneVisible;\n\t}\n\n\tprivate _updateCheckedObservables() {\n\t\ttransaction((tx) => {\n\t\t\tthis._allVisibleCheckedObservable.set(this._allVisibleChecked(this._itemElements, false), tx);\n\t\t\tconst checkedCount = this._itemElements.filter(element => element.checked).length;\n\t\t\tthis._checkedCountObservable.set(checkedCount, tx);\n\t\t\tthis._checkedElementsObservable.set(this.getCheckedElements(), tx);\n\t\t});\n\t}\n\n\t/**\n\t * Disposes of the hover and shows a new one for the given index if it has a tooltip.\n\t * @param element The element to show the hover for\n\t */\n\tprivate showHover(element: QuickPickItemElement): void {\n\t\tif (this._lastHover && !this._lastHover.isDisposed) {\n\t\t\tthis.hoverDelegate.onDidHideHover?.();\n\t\t\tthis._lastHover?.dispose();\n\t\t}\n\n\t\tif (!element.element || !element.saneTooltip) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lastHover = this.hoverDelegate.showHover({\n\t\t\tcontent: element.saneTooltip,\n\t\t\ttarget: element.element,\n\t\t\tlinkHandler: (url) => {\n\t\t\t\tthis.linkOpenerDelegate(url);\n\t\t\t},\n\t\t\tappearance: {\n\t\t\t\tshowPointer: true,\n\t\t\t},\n\t\t\tcontainer: this._container,\n\t\t\tposition: {\n\t\t\t\thoverPosition: HoverPosition.RIGHT\n\t\t\t}\n\t\t}, false);\n\t}\n}\n\nfunction matchesContiguousIconAware(query: string, target: IParsedLabelWithIcons): IMatch[] | null {\n\n\tconst { text, iconOffsets } = target;\n\n\t// Return early if there are no icon markers in the word to match against\n\tif (!iconOffsets || iconOffsets.length === 0) {\n\t\treturn matchesContiguous(query, text);\n\t}\n\n\t// Trim the word to match against because it could have leading\n\t// whitespace now if the word started with an icon\n\tconst wordToMatchAgainstWithoutIconsTrimmed = ltrim(text, ' ');\n\tconst leadingWhitespaceOffset = text.length - wordToMatchAgainstWithoutIconsTrimmed.length;\n\n\t// match on value without icon\n\tconst matches = matchesContiguous(query, wordToMatchAgainstWithoutIconsTrimmed);\n\n\t// Map matches back to offsets with icon and trimming\n\tif (matches) {\n\t\tfor (const match of matches) {\n\t\t\tconst iconOffset = iconOffsets[match.start + leadingWhitespaceOffset] /* icon offsets at index */ + leadingWhitespaceOffset /* overall leading whitespace offset */;\n\t\t\tmatch.start += iconOffset;\n\t\t\tmatch.end += iconOffset;\n\t\t}\n\t}\n\n\treturn matches;\n}\n\nfunction matchesContiguous(word: string, wordToMatchAgainst: string): IMatch[] | null {\n\tconst matchIndex = wordToMatchAgainst.toLowerCase().indexOf(word.toLowerCase());\n\tif (matchIndex !== -1) {\n\t\treturn [{ start: matchIndex, end: matchIndex + word.length }];\n\t}\n\treturn null;\n}\n\nfunction compareEntries(elementA: IQuickPickElement, elementB: IQuickPickElement, lookFor: string): number {\n\n\tconst labelHighlightsA = elementA.labelHighlights || [];\n\tconst labelHighlightsB = elementB.labelHighlights || [];\n\tif (labelHighlightsA.length && !labelHighlightsB.length) {\n\t\treturn -1;\n\t}\n\n\tif (!labelHighlightsA.length && labelHighlightsB.length) {\n\t\treturn 1;\n\t}\n\n\tif (labelHighlightsA.length === 0 && labelHighlightsB.length === 0) {\n\t\treturn 0;\n\t}\n\n\treturn compareAnything(elementA.saneSortLabel, elementB.saneSortLabel, lookFor);\n}\n"]}
1
+ {"version":3,"sources":["vs/platform/quickinput/browser/quickInputList.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;;;;;;;;;;;AAEhG,OAAO,KAAK,KAAK,MAAM,mCAAmC,CAAC;AAC3D,OAAO,KAAK,GAAG,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAK5E,OAAO,EAA0B,SAAS,EAAE,MAAM,iDAAiD,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AAG9F,OAAO,EAAE,QAAQ,EAAE,kCAAkC,EAAiB,MAAM,2CAA2C,CAAC;AACxH,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AAEnF,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAyB,MAAM,+BAA+B,CAAC;AAGrG,OAAO,EAAyB,mBAAmB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAE5I,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACnG,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACvG,OAAO,EAAE,EAAE,EAAE,MAAM,kCAAkC,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAkG,cAAc,EAAiB,MAAM,yBAAyB,CAAC;AAExK,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAiChB,MAAM,wBAAwB;IAG7B,YACU,KAAa,EACb,WAAoB,EAC7B,QAAuB;QAFd,UAAK,GAAL,KAAK,CAAQ;QACb,gBAAW,GAAX,WAAW,CAAS;QA8CtB,YAAO,GAAG,KAAK,CAAC;QA3CvB,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;YAC1B,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YACvC,MAAM,aAAa,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAEjE,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC;iBAC5F,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;iBAChC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBAChB,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,OAAO;gBACN,SAAS;gBACT,aAAa;gBACb,aAAa;aACb,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,WAAW,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC;IACtC,CAAC;IAED,uBAAuB;IAEvB,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;IACnC,CAAC;IACD,IAAI,aAAa;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;IACvC,CAAC;IACD,IAAI,aAAa;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;IACvC,CAAC;IAOD,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IACD,IAAI,OAAO,CAAC,KAA8B;QACzC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACvB,CAAC;IAGD,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IACD,IAAI,MAAM,CAAC,KAAc;QACxB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACtB,CAAC;IAGD,IAAI,eAAe;QAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC9B,CAAC;IACD,IAAI,eAAe,CAAC,KAAyB;QAC5C,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAC/B,CAAC;IAGD,IAAI,UAAU;QACb,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IACD,IAAI,UAAU,CAAC,KAAyB;QACvC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC1B,CAAC;IAGD,IAAI,WAAW;QACd,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IACD,IAAI,WAAW,CAAC,KAAyD;QACxE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC3B,CAAC;IAGD,IAAI,eAAe;QAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC9B,CAAC;IACD,IAAI,eAAe,CAAC,KAA2B;QAC9C,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAC/B,CAAC;IAGD,IAAI,qBAAqB;QACxB,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACpC,CAAC;IACD,IAAI,qBAAqB,CAAC,KAA2B;QACpD,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;IACrC,CAAC;IAGD,IAAI,gBAAgB;QACnB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAC/B,CAAC;IACD,IAAI,gBAAgB,CAAC,KAA2B;QAC/C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IAChC,CAAC;CACD;AAED,MAAM,oBAAqB,SAAQ,wBAAwB;IAG1D,YACC,KAAa,EACJ,UAAkB,EAC3B,WAAoB,EACX,mBAA+E,EAChF,UAAqE,EACpE,IAAoB,EACrB,UAA2C;QAEnD,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QAPvB,eAAU,GAAV,UAAU,CAAQ;QAElB,wBAAmB,GAAnB,mBAAmB,CAA4D;QAChF,eAAU,GAAV,UAAU,CAA2D;QACpE,SAAI,GAAJ,IAAI,CAAgB;QACrB,eAAU,GAAV,UAAU,CAAiC;QAqB5C,aAAQ,GAAG,KAAK,CAAC;QAjBxB,IAAI,CAAC,SAAS,GAAG,WAAW;YAC3B,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAmD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3I,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QAEd,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;QAC/C,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC;QAC3D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;IAClD,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IACD,IAAI,SAAS,CAAC,KAAsC;QACnD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IACzB,CAAC;IAGD,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IACD,IAAI,OAAO,CAAC,KAAc;QACzB,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACzD,CAAC;IACF,CAAC;IAED,IAAI,gBAAgB;QACnB,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC7B,CAAC;CACD;AAED,IAAK,6BAaJ;AAbD,WAAK,6BAA6B;IACjC;;OAEG;IACH,iFAAQ,CAAA;IACR;;OAEG;IACH,+FAAe,CAAA;IACf;;OAEG;IACH,+FAAe,CAAA;AAChB,CAAC,EAbI,6BAA6B,KAA7B,6BAA6B,QAajC;AAED,MAAM,yBAA0B,SAAQ,wBAAwB;IAS/D,YACC,KAAa,EACJ,4BAA6E,EAC7E,SAA8B;QAEvC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAHtB,iCAA4B,GAA5B,4BAA4B,CAAiD;QAC7E,cAAS,GAAT,SAAS,CAAqB;QAXxC,aAAQ,GAAG,IAAI,KAAK,EAAwB,CAAC;QAC7C;;;;WAIG;QACH,yBAAoB,GAAG,6BAA6B,CAAC,IAAI,CAAC;IAQ1D,CAAC;CACD;AAED,MAAM,sBAAsB;IAC3B,SAAS,CAAC,OAA0B;QAEnC,IAAI,OAAO,YAAY,yBAAyB,EAAE,CAAC;YAClD,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrC,CAAC;IAED,aAAa,CAAC,OAA0B;QACvC,IAAI,OAAO,YAAY,oBAAoB,EAAE,CAAC;YAC7C,OAAO,4BAA4B,CAAC,EAAE,CAAC;QACxC,CAAC;aAAM,CAAC;YACP,OAAO,iCAAiC,CAAC,EAAE,CAAC;QAC7C,CAAC;IACF,CAAC;CACD;AAED,MAAM,+BAA+B;IAEpC,kBAAkB;QACjB,OAAO,QAAQ,CAAC,IAAY,EAAE,aAAa,CAAC,CAAC;IAC9C,CAAC;IAED,YAAY,CAAC,OAA0B;QACtC,OAAO,OAAO,CAAC,SAAS,EAAE,KAAK;YAC9B,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,KAAK,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE;YACxD,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAC1B,CAAC;IAED,aAAa;QACZ,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,OAA0B;QACjC,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;IACpD,CAAC;IAED,SAAS,CAAC,OAA0B;QACnC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,OAAO,YAAY,oBAAoB,CAAC,EAAE,CAAC;YACxE,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,OAAO;YACN,IAAI,KAAK,KAAK,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YACvC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;SAC9C,CAAC;IACH,CAAC;CACD;AAED,MAAe,0BAA0B;IAGxC,YACkB,aAAyC,EACzC,YAA2B;QAD3B,kBAAa,GAAb,aAAa,CAA4B;QACzC,iBAAY,GAAZ,YAAY,CAAe;IACzC,CAAC;IAEL,sFAAsF;IACtF,cAAc,CAAC,SAAsB;QACpC,MAAM,IAAI,GAAgC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,IAAI,CAAC,iBAAiB,GAAG,IAAI,eAAe,EAAE,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAEjE,WAAW;QACX,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;YAC5F,wGAAwG;YACxG,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC/E,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC7C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;gBACrC,IAAI,CAAC,OAAgC,CAAC,OAAO,GAAG,OAAO,CAAC;YAC1D,CAAC;QACF,CAAC,CAAC,CAAC,CAAC;QAEJ,OAAO;QACP,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAE1D,QAAQ;QACR,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACzJ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAEzE,aAAa;QACb,MAAM,mBAAmB,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE5C,SAAS;QACT,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,eAAe,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACjI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAExC,YAAY;QACZ,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAE1E,UAAU;QACV,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE;YAC1C,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3E,sBAAsB,EAAE,kCAAkC,CAAC,IAAI,CAAC,YAAY,CAAC;SAC7E,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAC1E,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE3C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,eAAe,CAAC,IAAiC;QAChD,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;IAED,cAAc,CAAC,QAA4C,EAAE,MAAc,EAAE,IAAiC;QAC7G,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CAID;AAED,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,0BAAgD;;aAC1E,OAAE,GAAG,eAAH,AAAkB,CAAC;IAKrC,YACC,aAAyC,EACzC,YAA2B,EACZ,YAA4C;QAE3D,KAAK,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAFH,iBAAY,GAAZ,YAAY,CAAe;QAN5D,8CAA8C;QAC7B,kCAA6B,GAAG,IAAI,GAAG,EAAgC,CAAC;IAQzF,CAAC;IAED,IAAI,UAAU;QACb,OAAO,8BAA4B,CAAC,EAAE,CAAC;IACxC,CAAC;IAEO,cAAc,CAAC,OAA6B,EAAE,IAAiC;QACtF,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO;QACR,CAAC;QAED,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,GAAG,qBAAqB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACpG,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC1C,gFAAgF;YAChF,qGAAqG;YACrG,QAAQ,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACP,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC9B,QAAQ,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC;aAAM,CAAC;YACP,QAAQ,CAAC,MAAM,EAAE,CAAC;QACnB,CAAC;QAED,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,aAAa,CAAC,IAA2C,EAAE,KAAa,EAAE,IAAiC;QAC1G,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;QAC1C,MAAM,QAAQ,GAAmB,OAAO,CAAC,IAAI,CAAC;QAE9C,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC;QAElF,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEnC,MAAM,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;QAE7E,OAAO;QACP,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3I,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,uBAAuB,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,CAAC;QAED,QAAQ;QACR,IAAI,gBAAgE,CAAC;QACrE,gDAAgD;QAChD,6CAA6C;QAC7C,aAAa;QACb,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YACrD,gBAAgB,GAAG;gBAClB,QAAQ,EAAE;oBACT,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;oBACtC,iBAAiB,EAAE,IAAI;iBACvB;gBACD,4BAA4B,EAAE,OAAO,CAAC,eAAe;aACrD,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAA2B;YACvC,OAAO,EAAE,eAAe,IAAI,EAAE;YAC9B,yEAAyE;YACzE,gBAAgB;YAChB,kBAAkB,EAAE,qBAAqB,IAAI,EAAE;YAC/C,mBAAmB,EAAE,IAAI;SACzB,CAAC;QACF,OAAO,CAAC,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC;QAC5C,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QACjC,OAAO,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAEzE,aAAa;QACb,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAEzC,SAAS;QACT,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,IAAI,KAAqD,CAAC;YAC1D,yEAAyE;YACzE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC1B,KAAK,GAAG;oBACP,QAAQ,EAAE;wBACT,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;wBACjC,iBAAiB,EAAE,IAAI;qBACvB;oBACD,4BAA4B,EAAE,OAAO,CAAC,UAAU;iBAChD,CAAC;YACH,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE;gBACnD,OAAO,EAAE,gBAAgB;gBACzB,KAAK;gBACL,mBAAmB,EAAE,IAAI;aACzB,CAAC,CAAC;QACJ,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAC5C,CAAC;QAED,YAAY;QACZ,IAAI,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;YACrD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;YAClC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,mCAAmC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC;QAElH,UAAU;QACV,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,wBAAwB,CAC1E,MAAM,EACN,MAAM,KAAK,EAAE,EACb,GAAG,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CACjE,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC;IAEQ,cAAc,CAAC,OAA8C,EAAE,MAAc,EAAE,IAAiC;QACxH,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,0BAA0B,CAAC,IAA0B;QACpD,OAAO,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAEO,oBAAoB,CAAC,IAA0B;QACtD,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvG,CAAC;IAEO,uBAAuB,CAAC,IAA0B;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;;AAxKI,4BAA4B;IAS/B,WAAA,aAAa,CAAA;GATV,4BAA4B,CAyKjC;AAED,MAAM,iCAAkC,SAAQ,0BAAqD;IAArG;;QAGC,6FAA6F;QAC7F,kCAAkC;QACjB,gCAA2B,GAAG,IAAI,GAAG,EAAqC,CAAC;IA2F7F,CAAC;aA/FgB,OAAE,GAAG,oBAAH,AAAuB,CAAC;IAM1C,IAAI,UAAU;QACb,OAAO,iCAAiC,CAAC,EAAE,CAAC;IAC7C,CAAC;IAED,IAAI,iBAAiB;QACpB,OAAO,CAAC,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,kBAAkB,CAAC,SAAoC;QACtD,OAAO,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC;IAEQ,aAAa,CAAC,IAAgD,EAAE,KAAa,EAAE,IAAiC;QACxH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;QAC1C,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAwB,OAAO,CAAC,SAAS,CAAC;QAExD,MAAM,EAAE,eAAe,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;QAE3D,OAAO;QACP,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAEzB,QAAQ;QACR,IAAI,gBAAgE,CAAC;QACrE,gDAAgD;QAChD,6CAA6C;QAC7C,aAAa;QACb,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YACrD,gBAAgB,GAAG;gBAClB,QAAQ,EAAE;oBACT,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;oBACtC,iBAAiB,EAAE,IAAI;iBACvB;gBACD,4BAA4B,EAAE,OAAO,CAAC,eAAe;aACrD,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAA2B;YACvC,OAAO,EAAE,eAAe,IAAI,EAAE;YAC9B,yEAAyE;YACzE,gBAAgB;YAChB,kBAAkB,EAAE,qBAAqB,IAAI,EAAE;YAC/C,mBAAmB,EAAE,IAAI;SACzB,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAEzE,YAAY;QACZ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAE9D,UAAU;QACV,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,wBAAwB,CAC1E,MAAM,EACN,MAAM,KAAK,EAAE,EACb,GAAG,EAAE,CAAC,OAAO,CAAC,4BAA4B,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CACpF,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAEQ,cAAc,CAAC,OAAmD,EAAE,MAAc,EAAE,IAAiC;QAC7H,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC3D,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAEO,YAAY,CAAC,SAAoC;QACxD,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7G,CAAC;IAEO,eAAe,CAAC,SAAoC;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACpD,CAAC;IACF,CAAC;;AAGK,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,UAAU;IAiD7C,YACS,MAAmB,EACnB,aAA6B,EAC7B,kBAA6C,EACrD,EAAU,EACF,MAAyB,EACV,oBAA2C,EAC3C,oBAA4D;QAEnF,KAAK,EAAE,CAAC;QARA,WAAM,GAAN,MAAM,CAAa;QACnB,kBAAa,GAAb,aAAa,CAAgB;QAC7B,uBAAkB,GAAlB,kBAAkB,CAA2B;QAE7C,WAAM,GAAN,MAAM,CAAmB;QAEO,yBAAoB,GAApB,oBAAoB,CAAuB;QAtDpF,+BAA+B;QAEd,eAAU,GAAG,IAAI,OAAO,EAAyB,CAAC;QAElD,aAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;QAChD;;UAEE;QACO,YAAO,GAAgB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAEnC,4BAAuB,GAAG,eAAe,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QACrE,0BAAqB,GAAkB,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAE/F,iCAA4B,GAAG,eAAe,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;QACnF,+BAA0B,GAAmB,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,4BAA4B,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAE1G,4BAAuB,GAAG,eAAe,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QACrE,0BAAqB,GAAkB,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAE/F,+BAA0B,GAAG,mBAAmB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,KAAK,EAAkB,CAAC,CAAC;QAC5G,6BAAwB,GAA4B,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAE/G,uBAAkB,GAAG,IAAI,OAAO,EAA6C,CAAC;QAC/F,sBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;QAEjC,gCAA2B,GAAG,IAAI,OAAO,EAAkC,CAAC;QAC7F,+BAA0B,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC;QAEnD,oBAAe,GAAG,IAAI,OAAO,EAAoD,CAAC;QAClF,iCAA4B,GAAG,IAAI,aAAa,EAAE,CAAC;QAEpE,YAAY;QAEJ,mBAAc,GAAG,KAAK,CAAC;QAMvB,mBAAc,GAAG,IAAI,KAAK,EAAiB,CAAC;QAC5C,iBAAY,GAAG,IAAI,KAAK,EAAqB,CAAC;QAC9C,kBAAa,GAAG,IAAI,KAAK,EAAwB,CAAC;QAC1D,qDAAqD;QACpC,uBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;QA6GpE,wBAAmB,GAAG,KAAK,CAAC;QAQ5B,mBAAc,GAAG,KAAK,CAAC;QAQvB,kBAAa,GAAG,IAAI,CAAC;QAQrB,sBAAiB,GAA2B,OAAO,CAAC;QAQpD,iBAAY,GAAG,IAAI,CAAC;QAQpB,gBAAW,GAAG,IAAI,CAAC;QAvI1B,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,kBAAkB,GAAG,IAAI,iCAAiC,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnG,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,cAAc,CAAC,4BAA4B,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1H,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,cAAc,CAC9D,CAAA,mBAA4C,CAAA,EAC5C,YAAY,EACZ,IAAI,CAAC,UAAU,EACf,IAAI,sBAAsB,EAAE,EAC5B,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAC7C;YACC,MAAM,EAAE;gBACP,MAAM,CAAC,OAAO;oBACb,OAAO,OAAO,CAAC,MAAM;wBACpB,CAAC;wBACD,CAAC,CAAC,OAAO,YAAY,yBAAyB;4BAC7C,CAAC;4BACD,CAAC,+BAAuB,CAAC;gBAC5B,CAAC;aACD;YACD,MAAM,EAAE;gBACP,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE;oBAClC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACjD,OAAO,CAAC,CAAC;oBACV,CAAC;oBACD,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;oBAClE,OAAO,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,qBAAqB,CAAC,CAAC;gBACrE,CAAC;aACD;YACD,qBAAqB,EAAE,IAAI,+BAA+B,EAAE;YAC5D,gBAAgB,EAAE,KAAK;YACvB,wBAAwB,EAAE,KAAK;YAC/B,+BAA+B,EAAE,IAAI;YACrC,kBAAkB,EAAE,kBAAkB,CAAC,IAAI;YAC3C,iBAAiB,EAAE,KAAK;YACxB,MAAM,EAAE,CAAC;YACT,mBAAmB,EAAE,KAAK;YAC1B,0BAA0B,EAAE,IAAI;YAChC,uBAAuB,EAAE,IAAI;SAC7B,CACD,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC3B,CAAC;IAED,gCAAgC;IAGhC,IAAI,gBAAgB;QACnB,OAAO,KAAK,CAAC,GAAG,CACf,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAC3B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAA6B,EAAE,CAAC,CAAC,YAAY,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAC5G,IAAI,CAAC,MAAM,CACX,CAAC;IACH,CAAC;IAGD,IAAI,oBAAoB;QACvB,OAAO,KAAK,CAAC,GAAG,CACf,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAC/B,CAAC,CAAC,EAAE,CAAC,CAAC;YACL,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAA6B,EAAE,CAAC,CAAC,YAAY,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9G,KAAK,EAAE,CAAC,CAAC,YAAY;SACrB,CAAC,EACF,IAAI,CAAC,MAAM,CACX,CAAC;IACH,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC;IACjD,CAAC;IAED,IAAI,SAAS,CAAC,KAAc;QAC3B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACrD,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;IAC7B,CAAC;IAED,IAAI,SAAS,CAAC,SAAiB;QAC9B,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAClC,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;IAC7B,CAAC;IAED,IAAI,SAAS,CAAC,KAAoB;QACjC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,IAAI,EAAE,CAAC;IACpC,CAAC;IAED,IAAI,OAAO,CAAC,KAAc;QACzB,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACvE,CAAC;IAGD,IAAI,kBAAkB;QACrB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACjC,CAAC;IACD,IAAI,kBAAkB,CAAC,KAAc;QACpC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;IAClC,CAAC;IAGD,IAAI,aAAa;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;IACD,IAAI,aAAa,CAAC,KAAc;QAC/B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC7B,CAAC;IAGD,IAAI,YAAY;QACf,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;IACD,IAAI,YAAY,CAAC,KAAc;QAC9B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC5B,CAAC;IAGD,IAAI,gBAAgB;QACnB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAC/B,CAAC;IACD,IAAI,gBAAgB,CAAC,KAA6B;QACjD,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IAChC,CAAC;IAGD,IAAI,WAAW;QACd,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IACD,IAAI,WAAW,CAAC,KAAc;QAC7B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC3B,CAAC;IAGD,IAAI,UAAU;QACb,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IACD,IAAI,UAAU,CAAC,KAAc;QAC5B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,YAAY;IAEZ,4BAA4B;IAEpB,kBAAkB;QACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,gCAAgC,EAAE,CAAC;QACxC,IAAI,CAAC,wCAAwC,EAAE,CAAC;IACjD,CAAC;IAEO,kBAAkB;QACzB,gDAAgD;QAChD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;YACvC,MAAM,KAAK,GAAG,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC3C,QAAQ,KAAK,CAAC,OAAO,EAAE,CAAC;gBACvB;oBACC,IAAI,CAAC,cAAc,EAAE,CAAC;oBACtB,MAAM;YACR,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,yBAAyB;QAChC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;YAClF,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,kDAAkD;gBACnE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC;QACF,CAAC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,2BAA2B;QAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;YACrF,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC;QACF,CAAC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,2BAA2B;QAClC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,EAAE;YAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;YACtE,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzB,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAClC,CAAC;QACF,CAAC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,yBAAyB;QAChC,yCAAyC;QACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,4BAA4B,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC;IAC7I,CAAC;IAEO,sBAAsB;QAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;YAC3C,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBACf,CAAC,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;gBAEhC,2CAA2C;gBAC3C,0CAA0C;gBAC1C,wCAAwC;gBACxC,0CAA0C;gBAC1C,+BAA+B;gBAC/B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACtC,CAAC;QACF,CAAC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,uBAAuB;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,gBAAgB,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7J,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;YAC/C,8EAA8E;YAC9E,8DAA8D;YAC9D,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpD,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO;YACR,CAAC;YACD;YACC,oEAAoE;YACpE,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;gBACxD,oDAAoD;gBACpD,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,aAAqB,EAAE,CAAC,CAAC,OAAO,EAAE,OAAe,CAAC,EAC/E,CAAC;gBACF,OAAO;YACR,CAAC;YACD,IAAI,CAAC;gBACJ,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;oBAChC,IAAI,CAAC,CAAC,OAAO,YAAY,oBAAoB,EAAE,CAAC;wBAC/C,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC3B,CAAC;gBACF,CAAC,CAAC,CAAC;YACJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,8CAA8C;gBAC9C,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7B,MAAM,CAAC,CAAC;gBACT,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;YACxC,oEAAoE;YACpE,oEAAoE;YACpE,qDAAqD;YACrD,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,aAAqB,EAAE,CAAC,CAAC,OAAO,EAAE,OAAe,CAAC,EAAE,CAAC;gBACtF,OAAO;YACR,CAAC;YACD,OAAO,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,wCAAwC;QAC/C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;YAC9C,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC3B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAA8B;gBACzE,0DAA0D;gBAC1D,CAAC,CAAC,IAAI,CAAC;YACR,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,CAAC;gBACnE,MAAM,KAAK,GAAG,SAAS,KAAK,MAAM,CAAC;gBACnC,qDAAqD;gBACrD,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,oBAAoB,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;gBACrG,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;oBAC7B,IAAI,KAAK,EAAE,CAAC;wBACX,SAAS,CAAC,oBAAoB,IAAI,6BAA6B,CAAC,WAAW,CAAC;oBAC7E,CAAC;yBAAM,CAAC;wBACP,SAAS,CAAC,oBAAoB,IAAI,CAAC,6BAA6B,CAAC,WAAW,CAAC;oBAC9E,CAAC;oBAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAChC,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;YACzC,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO;gBACvB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAA8B;gBACrE,CAAC,CAAC,IAAI,CAAC;YACR,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,CAAC;gBACnE,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;oBAC1B,SAAS;gBACV,CAAC;gBACD,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,oBAAoB,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;gBACpG,IAAI,CAAC,YAAY,EAAE,CAAC;oBACnB,SAAS,CAAC,oBAAoB,IAAI,6BAA6B,CAAC,WAAW,CAAC;oBAC5E,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAChC,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;YACxC,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO;gBACvB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAA8B;gBACrE,CAAC,CAAC,IAAI,CAAC;YACR,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,CAAC;gBACnE,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;oBAC1B,SAAS;gBACV,CAAC;gBACD,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,oBAAoB,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;gBACpG,IAAI,YAAY,EAAE,CAAC;oBAClB,SAAS,CAAC,oBAAoB,IAAI,CAAC,6BAA6B,CAAC,WAAW,CAAC;oBAC7E,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAChC,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,gCAAgC;QACvC,0FAA0F;QAC1F,gDAAgD;QAChD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE;YAClD,MAAM,yBAAyB,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAA6B,EAAE,CAAC,CAAC,YAAY,oBAAoB,CAAC,CAAC;YACzH,IAAI,yBAAyB,CAAC,MAAM,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC5D,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,yBAAyB,EAAE,CAAC;oBACnF,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrC,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC;YACpD,CAAC;QACF,CAAC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY;IAEZ,wBAAwB;IAExB,oBAAoB,CAAC,OAAgB;QACpC,IAAI,CAAC,4BAA4B,CAAC,YAAY,CAAC,GAAG,EAAE;YACnD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACpC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;oBACrF,qDAAqD;oBACrD,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;gBAC3B,CAAC;YACF,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,aAA8B;QACzC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACxE,IAAI,uBAA8D,CAAC;QACnE,IAAI,CAAC,aAAa,GAAG,IAAI,KAAK,EAAwB,CAAC;QACvD,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;YAChE,IAAI,OAA0B,CAAC;YAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACnB,6DAA6D;oBAC7D,OAAO,MAAM,CAAC;gBACf,CAAC;gBACD,uBAAuB,GAAG,IAAI,yBAAyB,CACtD,KAAK,EACL,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,EAC7C,IAAI,CACJ,CAAC;gBACF,OAAO,GAAG,uBAAuB,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACP,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAClE,IAAI,SAA0C,CAAC;gBAC/C,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACpE,SAAS,GAAG,QAAQ,CAAC;gBACtB,CAAC;gBACD,MAAM,GAAG,GAAG,IAAI,oBAAoB,CACnC,KAAK,EACL,uBAAuB,EAAE,QAAQ;oBAChC,CAAC,CAAC,uBAAuB,CAAC,QAAQ,CAAC,MAAM;oBACzC,CAAC,CAAC,KAAK,EACR,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAC9C,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EACpC,IAAI,CAAC,eAAe,EACpB,IAAI,EACJ,SAAS,CACT,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAE7B,IAAI,uBAAuB,EAAE,CAAC;oBAC7B,uBAAuB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC3C,OAAO,MAAM,CAAC;gBACf,CAAC;gBACD,OAAO,GAAG,GAAG,CAAC;YACf,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC;QACf,CAAC,EAAE,IAAI,KAAK,EAAqB,CAAC,CAAC;QAEnC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE3C,iDAAiD;QACjD,oDAAoD;QACpD,IAAI,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,EAAE,EAAE,CAAC;YACzD,UAAU,CAAC,GAAG,EAAE;gBACf,gDAAgD;gBAChD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC;gBAC7F,MAAM,MAAM,GAAG,cAAc,EAAE,UAAU,CAAC;gBAC1C,IAAI,cAAc,IAAI,MAAM,EAAE,CAAC;oBAC9B,MAAM,WAAW,GAAG,cAAc,CAAC,WAAW,CAAC;oBAC/C,cAAc,CAAC,MAAM,EAAE,CAAC;oBACxB,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;gBAClD,CAAC;YACF,CAAC,EAAE,CAAC,CAAC,CAAC;QACP,CAAC;IACF,CAAC;IAED,kBAAkB,CAAC,KAAuB;QACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;aAC/E,MAAM,CAAC,CAAC,CAAC,EAA6B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;QACF,CAAC;IACF,CAAC;IAED,mBAAmB;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;IAC1E,CAAC;IAED,mBAAmB,CAAC,KAAuB;QAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;aAC/E,MAAM,CAAC,CAAC,CAAC,EAA6B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,kBAAkB;QACjB,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aAC9C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,kBAAkB,CAAC,KAAuB;QACzC,IAAI,CAAC,4BAA4B,CAAC,YAAY,CAAC,GAAG,EAAE;YACnD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;YAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC1C,qDAAqD;gBACrD,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAoB;QACzB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YAChC,OAAO;QACR,CAAC;QAED,IAAI,IAAI,KAAK,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrE,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC;QAC7B,CAAC;QAED,QAAQ,IAAI,EAAE,CAAC;YACd,KAAK,cAAc,CAAC,KAAK;gBACxB,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,YAAY,oBAAoB,CAAC,CAAC;gBACnF,MAAM;YACP,KAAK,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;gBACzB,IAAI,YAAY,GAAG,KAAK,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;oBACtC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,YAAY,oBAAoB,CAAC,EAAE,CAAC;wBAClD,OAAO,KAAK,CAAC;oBACd,CAAC;oBACD,IAAI,YAAY,EAAE,CAAC;wBAClB,OAAO,IAAI,CAAC;oBACb,CAAC;oBACD,YAAY,GAAG,CAAC,YAAY,CAAC;oBAC7B,OAAO,KAAK,CAAC;gBACd,CAAC,CAAC,CAAC;gBACH,MAAM;YACP,CAAC;YACD,KAAK,cAAc,CAAC,IAAI;gBACvB,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;gBAC/C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,YAAY,oBAAoB,CAAC,CAAC;gBAClF,MAAM;YACP,KAAK,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACxC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;oBAClE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,YAAY,oBAAoB,CAAC,EAAE,CAAC;wBAClD,OAAO,KAAK,CAAC;oBACd,CAAC;oBACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC7B,OAAO,IAAI,CAAC;gBACb,CAAC,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC3C,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1D,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACtB,CAAC;gBACD,MAAM;YACP,CAAC;YACD,KAAK,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACxC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;oBACtE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,YAAY,oBAAoB,CAAC,EAAE,CAAC;wBAClD,OAAO,KAAK,CAAC;oBACd,CAAC;oBACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBACtD,IAAI,MAAM,KAAK,IAAI,IAAK,MAAoC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;wBACxF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC9B,CAAC;yBAAM,CAAC;wBACP,2EAA2E;wBAC3E,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC3B,CAAC;oBACD,OAAO,IAAI,CAAC;gBACb,CAAC,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC3C,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1D,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACtB,CAAC;gBACD,MAAM;YACP,CAAC;YACD,KAAK,cAAc,CAAC,QAAQ;gBAC3B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;oBACzC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,YAAY,oBAAoB,CAAC,EAAE,CAAC;wBAClD,OAAO,KAAK,CAAC;oBACd,CAAC;oBACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC7B,OAAO,IAAI,CAAC;gBACb,CAAC,CAAC,CAAC;gBACH,MAAM;YACP,KAAK,cAAc,CAAC,YAAY;gBAC/B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;oBAC7C,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,YAAY,oBAAoB,CAAC,EAAE,CAAC;wBAClD,OAAO,KAAK,CAAC;oBACd,CAAC;oBACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBACtD,IAAI,MAAM,KAAK,IAAI,IAAK,MAAoC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;wBACxF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC9B,CAAC;yBAAM,CAAC;wBACP,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC3B,CAAC;oBACD,OAAO,IAAI,CAAC;gBACb,CAAC,CAAC,CAAC;gBACH,MAAM;YACP,KAAK,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;gBACnC,IAAI,oBAAoB,GAAG,KAAK,CAAC;gBACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;oBACtD,IAAI,oBAAoB,EAAE,CAAC;wBAC1B,2DAA2D;wBAC3D,gCAAgC;wBAChC,OAAO,IAAI,CAAC;oBACb,CAAC;oBAED,IAAI,CAAC,CAAC,OAAO,YAAY,yBAAyB,EAAE,CAAC;wBACpD,oBAAoB,GAAG,IAAI,CAAC;wBAC5B,kGAAkG;wBAClG,IAAI,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;4BAC3D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC1C,CAAC;6BAAM,CAAC;4BACP,kDAAkD;4BAClD,qCAAqC;4BACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;wBACjC,CAAC;oBACF,CAAC;yBAAM,IAAI,CAAC,CAAC,OAAO,YAAY,oBAAoB,EAAE,CAAC;wBACtD,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;4BACzB,IAAI,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gCAC9D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;4BAC9B,CAAC;iCAAM,CAAC;gCACP,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;4BACjC,CAAC;4BACD,OAAO,IAAI,CAAC;wBACb,CAAC;6BAAM,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC/C,uEAAuE;4BACvE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;4BAChC,OAAO,IAAI,CAAC;wBACb,CAAC;oBACF,CAAC;oBACD,OAAO,KAAK,CAAC;gBACd,CAAC,CAAC,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;gBACvC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;oBACtB,yDAAyD;oBACzD,eAAe;oBACf,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;oBAC/C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,YAAY,oBAAoB,CAAC,CAAC;gBACnF,CAAC;gBACD,MAAM;YACP,CAAC;YACD,KAAK,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBACvC,IAAI,YAA2C,CAAC;gBAChD,4DAA4D;gBAC5D,yDAAyD;gBACzD,4BAA4B;gBAC5B,IAAI,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;gBAC3D,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;oBAC1D,IAAI,CAAC,CAAC,OAAO,YAAY,yBAAyB,EAAE,CAAC;wBACpD,IAAI,cAAc,EAAE,CAAC;4BACpB,IAAI,CAAC,YAAY,EAAE,CAAC;gCACnB,IAAI,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;oCAC3D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gCAC9B,CAAC;qCAAM,CAAC;oCACP,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gCACjC,CAAC;gCACD,YAAY,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;4BACtC,CAAC;wBACF,CAAC;6BAAM,CAAC;4BACP,cAAc,GAAG,IAAI,CAAC;wBACvB,CAAC;oBACF,CAAC;yBAAM,IAAI,CAAC,CAAC,OAAO,YAAY,oBAAoB,EAAE,CAAC;wBACtD,IAAI,CAAC,YAAY,EAAE,CAAC;4BACnB,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gCACzB,IAAI,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;oCAC9D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gCAC9B,CAAC;qCAAM,CAAC;oCACP,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gCACjC,CAAC;gCAED,YAAY,GAAG,CAAC,CAAC,OAAO,CAAC;4BAC1B,CAAC;iCAAM,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gCAC/C,uEAAuE;gCACvE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gCAChC,OAAO,IAAI,CAAC;4BACb,CAAC;wBACF,CAAC;oBACF,CAAC;oBACD,OAAO,KAAK,CAAC;gBACd,CAAC,CAAC,CAAC;gBACH,IAAI,YAAY,EAAE,CAAC;oBAClB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;gBACrC,CAAC;gBACD,MAAM;YACP,CAAC;QACF,CAAC;IACF,CAAC;IAED,UAAU;QACT,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,QAAQ;QACP,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,SAAkB;QACxB,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG;QAC5D,iDAAiD;QACjD,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,EAAE;YAC/B,kEAAkE;cAChE,CACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,KAAa;QACnB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACnG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC;QACd,CAAC;QAED,MAAM,mBAAmB,GAAG,KAAK,CAAC;QAClC,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAErB,kBAAkB;QAClB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACrF,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACpC,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;gBACpC,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;gBAC1C,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;gBACrC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;gBACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACzE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;oBAClB,OAAO,CAAC,SAAS,GAAG,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC3G,CAAC;YACF,CAAC,CAAC,CAAC;QACJ,CAAC;QAED,qFAAqF;aAChF,CAAC;YACL,IAAI,gBAAiD,CAAC;YACtD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACpC,IAAI,eAAqC,CAAC;gBAC1C,IAAI,IAAI,CAAC,gBAAgB,KAAK,OAAO,EAAE,CAAC;oBACvC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;gBACrI,CAAC;qBAAM,CAAC;oBACP,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,0BAA0B,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;gBACxJ,CAAC;gBACD,MAAM,qBAAqB,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;gBAClK,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;gBAEnJ,IAAI,eAAe,IAAI,qBAAqB,IAAI,gBAAgB,EAAE,CAAC;oBAClE,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC;oBAC1C,OAAO,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;oBACtD,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;oBAC5C,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACP,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;oBACpC,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;oBAC1C,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;oBACrC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;gBACjE,CAAC;gBAED,yFAAyF;gBACzF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;oBAClB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;gBAC/B,CAAC;qBAAM,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;oBAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;gBACvB,CAAC;gBAED,iEAAiE;gBACjE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC;oBACtF,IAAI,QAAQ,EAAE,IAAI,KAAK,WAAW,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;wBACzD,gBAAgB,GAAG,QAAQ,CAAC;oBAC7B,CAAC;oBACD,IAAI,gBAAgB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;wBACzC,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC;wBACrC,gBAAgB,GAAG,SAAS,CAAC;oBAC9B,CAAC;gBACF,CAAC;YACF,CAAC,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,IAAI,KAAK;YACjD,8EAA8E;YAC9E,CAAC,CAAC,IAAI,CAAC,aAAa;YACpB,uBAAuB;YACvB,CAAC,CAAC,IAAI,CAAC,YAAY,CACnB,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,cAAc;QACb,IAAI,CAAC,4BAA4B,CAAC,YAAY,CAAC,GAAG,EAAE;YACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAA6B,EAAE,CAAC,CAAC,YAAY,oBAAoB,CAAC,CAAC;YACnH,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YACrD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;oBAC/B,qDAAqD;oBACrD,OAAO,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC;gBAC/B,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAmB;QACxB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,WAAW;QACV,MAAM,OAAO,GAA6B,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,CAAC,CAAC,OAAO,YAAY,oBAAoB,CAAC,EAAE,CAAC;YACzE,OAAO;QACR,CAAC;QAED,mDAAmD;QACnD,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YACpD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC1B,OAAO;QACR,CAAC;QAED,4CAA4C;QAC5C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;YACzC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,oBAAoB,EAAE,CAAC;gBACnD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC;QACF,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,YAAY;IAEZ,yBAAyB;IAEjB,kBAAkB,CAAC,QAA6B;QACvD,MAAM,YAAY,GAAG,IAAI,KAAK,EAAyC,CAAC;QACxE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAChC,IAAI,OAAO,YAAY,yBAAyB,EAAE,CAAC;gBAClD,YAAY,CAAC,IAAI,CAAC;oBACjB,OAAO;oBACP,WAAW,EAAE,KAAK;oBAClB,SAAS,EAAE,KAAK;oBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACpC,OAAO,EAAE,CAAC;wBACV,WAAW,EAAE,KAAK;wBAClB,SAAS,EAAE,KAAK;qBAChB,CAAC,CAAC;iBACH,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACP,YAAY,CAAC,IAAI,CAAC;oBACjB,OAAO;oBACP,WAAW,EAAE,KAAK;oBAClB,SAAS,EAAE,KAAK;iBAChB,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC5C,CAAC;IAEO,kBAAkB,CAAC,QAAgC,EAAE,eAAe,GAAG,IAAI;QAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;gBACxD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACtB,OAAO,KAAK,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACP,eAAe,GAAG,IAAI,CAAC;gBACxB,CAAC;YACF,CAAC;QACF,CAAC;QACD,OAAO,eAAe,CAAC;IACxB,CAAC;IAEO,yBAAyB;QAChC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE;YAClB,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9F,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;YAClF,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,SAAS,CAAC,OAA6B;QAC9C,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YACpD,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC9C,OAAO;QACR,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;YAC9C,OAAO,EAAE,OAAO,CAAC,WAAW;YAC5B,MAAM,EAAE,OAAO,CAAC,OAAO;YACvB,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE;gBACpB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;YACD,UAAU,EAAE;gBACX,WAAW,EAAE,IAAI;aACjB;YACD,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,QAAQ,EAAE;gBACT,aAAa,6BAAqB;aAClC;SACD,EAAE,KAAK,CAAC,CAAC;IACX,CAAC;CACD,CAAA;AA9yBA;IADC,OAAO;sDAOP;AAGD;IADC,OAAO;0DAUP;AA5HW,cAAc;IAuDxB,WAAA,qBAAqB,CAAA;IACrB,WAAA,qBAAqB,CAAA;GAxDX,cAAc,CAw5B1B;;AAED,SAAS,0BAA0B,CAAC,KAAa,EAAE,MAA6B;IAE/E,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAErC,yEAAyE;IACzE,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,+DAA+D;IAC/D,kDAAkD;IAClD,MAAM,qCAAqC,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,GAAG,qCAAqC,CAAC,MAAM,CAAC;IAE3F,8BAA8B;IAC9B,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,qCAAqC,CAAC,CAAC;IAEhF,qDAAqD;IACrD,IAAI,OAAO,EAAE,CAAC;QACb,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,uBAAuB,CAAC,CAAC,2BAA2B,GAAG,uBAAuB,CAAC,uCAAuC,CAAC;YACpK,KAAK,CAAC,KAAK,IAAI,UAAU,CAAC;YAC1B,KAAK,CAAC,GAAG,IAAI,UAAU,CAAC;QACzB,CAAC;IACF,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,kBAA0B;IAClE,MAAM,UAAU,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAChF,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,cAAc,CAAC,QAA2B,EAAE,QAA2B,EAAE,OAAe;IAEhG,MAAM,gBAAgB,GAAG,QAAQ,CAAC,eAAe,IAAI,EAAE,CAAC;IACxD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,eAAe,IAAI,EAAE,CAAC;IACxD,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;QACzD,OAAO,CAAC,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;QACzD,OAAO,CAAC,CAAC;IACV,CAAC;IAED,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpE,OAAO,CAAC,CAAC;IACV,CAAC;IAED,OAAO,eAAe,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AACjF,CAAC","file":"quickInputList.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as cssJs from '../../../base/browser/cssValue.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js';\nimport { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.js';\nimport { AriaRole } from '../../../base/browser/ui/aria/aria.js';\nimport { IHoverWidget, IManagedHoverTooltipMarkdownString } from '../../../base/browser/ui/hover/hover.js';\nimport { IHoverDelegate } from '../../../base/browser/ui/hover/hoverDelegate.js';\nimport { HoverPosition } from '../../../base/browser/ui/hover/hoverWidget.js';\nimport { IIconLabelValueOptions, IconLabel } from '../../../base/browser/ui/iconLabel/iconLabel.js';\nimport { KeybindingLabel } from '../../../base/browser/ui/keybindingLabel/keybindingLabel.js';\nimport { IListVirtualDelegate } from '../../../base/browser/ui/list/list.js';\nimport { IListAccessibilityProvider, IListStyles } from '../../../base/browser/ui/list/listWidget.js';\nimport { Checkbox, createToggleActionViewItemProvider, IToggleStyles } from '../../../base/browser/ui/toggle/toggle.js';\nimport { RenderIndentGuides } from '../../../base/browser/ui/tree/abstractTree.js';\nimport { IObjectTreeElement, ITreeNode, ITreeRenderer, TreeVisibility } from '../../../base/browser/ui/tree/tree.js';\nimport { equals } from '../../../base/common/arrays.js';\nimport { ThrottledDelayer } from '../../../base/common/async.js';\nimport { compareAnything } from '../../../base/common/comparers.js';\nimport { memoize } from '../../../base/common/decorators.js';\nimport { isCancellationError } from '../../../base/common/errors.js';\nimport { Emitter, Event, EventBufferer, IValueWithChangeEvent } from '../../../base/common/event.js';\nimport { IMatch } from '../../../base/common/filters.js';\nimport { IMarkdownString } from '../../../base/common/htmlContent.js';\nimport { IParsedLabelWithIcons, getCodiconAriaLabel, matchesFuzzyIconAware, parseLabelWithIcons } from '../../../base/common/iconLabels.js';\nimport { KeyCode } from '../../../base/common/keyCodes.js';\nimport { Lazy } from '../../../base/common/lazy.js';\nimport { Disposable, DisposableStore, MutableDisposable } from '../../../base/common/lifecycle.js';\nimport { observableValue, observableValueOpts, transaction } from '../../../base/common/observable.js';\nimport { OS } from '../../../base/common/platform.js';\nimport { escape, ltrim } from '../../../base/common/strings.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { localize } from '../../../nls.js';\nimport { IAccessibilityService } from '../../accessibility/common/accessibility.js';\nimport { IInstantiationService } from '../../instantiation/common/instantiation.js';\nimport { WorkbenchObjectTree } from '../../list/browser/listService.js';\nimport { defaultCheckboxStyles } from '../../theme/browser/defaultStyles.js';\nimport { isDark } from '../../theme/common/theme.js';\nimport { IThemeService } from '../../theme/common/themeService.js';\nimport { IQuickPickItem, IQuickPickItemButtonEvent, IQuickPickSeparator, IQuickPickSeparatorButtonEvent, QuickPickFocus, QuickPickItem } from '../common/quickInput.js';\nimport { IQuickInputStyles } from './quickInput.js';\nimport { quickInputButtonToAction } from './quickInputUtils.js';\n\nconst $ = dom.$;\n\ninterface IQuickInputItemLazyParts {\n\treadonly saneLabel: string;\n\treadonly saneSortLabel: string;\n\treadonly saneAriaLabel: string;\n}\n\ninterface IQuickPickElement extends IQuickInputItemLazyParts {\n\treadonly hasCheckbox: boolean;\n\treadonly saneDetail?: string;\n\treadonly saneTooltip?: string | IMarkdownString | HTMLElement;\n\thidden: boolean;\n\telement?: HTMLElement;\n\tlabelHighlights?: IMatch[];\n\tseparator?: IQuickPickSeparator;\n}\n\ninterface IQuickInputItemTemplateData {\n\tentry: HTMLDivElement;\n\tcheckbox: MutableDisposable<Checkbox>;\n\ticon: HTMLDivElement;\n\touterLabel: HTMLElement;\n\tlabel: IconLabel;\n\tkeybinding: KeybindingLabel;\n\tdetail: IconLabel;\n\tseparator: HTMLDivElement;\n\tactionBar: ActionBar;\n\telement: IQuickPickElement;\n\ttoDisposeElement: DisposableStore;\n\ttoDisposeTemplate: DisposableStore;\n}\n\nclass BaseQuickPickItemElement implements IQuickPickElement {\n\tprivate readonly _init: Lazy<IQuickInputItemLazyParts>;\n\n\tconstructor(\n\t\treadonly index: number,\n\t\treadonly hasCheckbox: boolean,\n\t\tmainItem: QuickPickItem\n\t) {\n\t\tthis._init = new Lazy(() => {\n\t\t\tconst saneLabel = mainItem.label ?? '';\n\t\t\tconst saneSortLabel = parseLabelWithIcons(saneLabel).text.trim();\n\n\t\t\tconst saneAriaLabel = mainItem.ariaLabel || [saneLabel, this.saneDescription, this.saneDetail]\n\t\t\t\t.map(s => getCodiconAriaLabel(s))\n\t\t\t\t.filter(s => !!s)\n\t\t\t\t.join(', ');\n\n\t\t\treturn {\n\t\t\t\tsaneLabel,\n\t\t\t\tsaneSortLabel,\n\t\t\t\tsaneAriaLabel\n\t\t\t};\n\t\t});\n\t\tthis._saneDescription = mainItem.description;\n\t\tthis._saneTooltip = mainItem.tooltip;\n\t}\n\n\t// #region Lazy Getters\n\n\tget saneLabel() {\n\t\treturn this._init.value.saneLabel;\n\t}\n\tget saneSortLabel() {\n\t\treturn this._init.value.saneSortLabel;\n\t}\n\tget saneAriaLabel() {\n\t\treturn this._init.value.saneAriaLabel;\n\t}\n\n\t// #endregion\n\n\t// #region Getters and Setters\n\n\tprivate _element?: HTMLElement;\n\tget element() {\n\t\treturn this._element;\n\t}\n\tset element(value: HTMLElement | undefined) {\n\t\tthis._element = value;\n\t}\n\n\tprivate _hidden = false;\n\tget hidden() {\n\t\treturn this._hidden;\n\t}\n\tset hidden(value: boolean) {\n\t\tthis._hidden = value;\n\t}\n\n\tprivate _saneDescription?: string;\n\tget saneDescription() {\n\t\treturn this._saneDescription;\n\t}\n\tset saneDescription(value: string | undefined) {\n\t\tthis._saneDescription = value;\n\t}\n\n\tprotected _saneDetail?: string;\n\tget saneDetail() {\n\t\treturn this._saneDetail;\n\t}\n\tset saneDetail(value: string | undefined) {\n\t\tthis._saneDetail = value;\n\t}\n\n\tprivate _saneTooltip?: string | IMarkdownString | HTMLElement;\n\tget saneTooltip() {\n\t\treturn this._saneTooltip;\n\t}\n\tset saneTooltip(value: string | IMarkdownString | HTMLElement | undefined) {\n\t\tthis._saneTooltip = value;\n\t}\n\n\tprotected _labelHighlights?: IMatch[];\n\tget labelHighlights() {\n\t\treturn this._labelHighlights;\n\t}\n\tset labelHighlights(value: IMatch[] | undefined) {\n\t\tthis._labelHighlights = value;\n\t}\n\n\tprotected _descriptionHighlights?: IMatch[];\n\tget descriptionHighlights() {\n\t\treturn this._descriptionHighlights;\n\t}\n\tset descriptionHighlights(value: IMatch[] | undefined) {\n\t\tthis._descriptionHighlights = value;\n\t}\n\n\tprotected _detailHighlights?: IMatch[];\n\tget detailHighlights() {\n\t\treturn this._detailHighlights;\n\t}\n\tset detailHighlights(value: IMatch[] | undefined) {\n\t\tthis._detailHighlights = value;\n\t}\n}\n\nclass QuickPickItemElement extends BaseQuickPickItemElement {\n\treadonly onChecked: Event<boolean>;\n\n\tconstructor(\n\t\tindex: number,\n\t\treadonly childIndex: number,\n\t\thasCheckbox: boolean,\n\t\treadonly fireButtonTriggered: (event: IQuickPickItemButtonEvent<IQuickPickItem>) => void,\n\t\tprivate _onChecked: Emitter<{ element: IQuickPickElement; checked: boolean }>,\n\t\treadonly item: IQuickPickItem,\n\t\tprivate _separator: IQuickPickSeparator | undefined,\n\t) {\n\t\tsuper(index, hasCheckbox, item);\n\n\t\tthis.onChecked = hasCheckbox\n\t\t\t? Event.map(Event.filter<{ element: IQuickPickElement; checked: boolean }>(this._onChecked.event, e => e.element === this), e => e.checked)\n\t\t\t: Event.None;\n\n\t\tthis._saneDetail = item.detail;\n\t\tthis._labelHighlights = item.highlights?.label;\n\t\tthis._descriptionHighlights = item.highlights?.description;\n\t\tthis._detailHighlights = item.highlights?.detail;\n\t}\n\n\tget separator() {\n\t\treturn this._separator;\n\t}\n\tset separator(value: IQuickPickSeparator | undefined) {\n\t\tthis._separator = value;\n\t}\n\n\tprivate _checked = false;\n\tget checked() {\n\t\treturn this._checked;\n\t}\n\tset checked(value: boolean) {\n\t\tif (value !== this._checked) {\n\t\t\tthis._checked = value;\n\t\t\tthis._onChecked.fire({ element: this, checked: value });\n\t\t}\n\t}\n\n\tget checkboxDisabled() {\n\t\treturn !!this.item.disabled;\n\t}\n}\n\nenum QuickPickSeparatorFocusReason {\n\t/**\n\t * No item is hovered or active\n\t */\n\tNONE = 0,\n\t/**\n\t * Some item within this section is hovered\n\t */\n\tMOUSE_HOVER = 1,\n\t/**\n\t * Some item within this section is active\n\t */\n\tACTIVE_ITEM = 2\n}\n\nclass QuickPickSeparatorElement extends BaseQuickPickItemElement {\n\tchildren = new Array<QuickPickItemElement>();\n\t/**\n\t * If this item is >0, it means that there is some item in the list that is either:\n\t * * hovered over\n\t * * active\n\t */\n\tfocusInsideSeparator = QuickPickSeparatorFocusReason.NONE;\n\n\tconstructor(\n\t\tindex: number,\n\t\treadonly fireSeparatorButtonTriggered: (event: IQuickPickSeparatorButtonEvent) => void,\n\t\treadonly separator: IQuickPickSeparator,\n\t) {\n\t\tsuper(index, false, separator);\n\t}\n}\n\nclass QuickInputItemDelegate implements IListVirtualDelegate<IQuickPickElement> {\n\tgetHeight(element: IQuickPickElement): number {\n\n\t\tif (element instanceof QuickPickSeparatorElement) {\n\t\t\treturn 30;\n\t\t}\n\t\treturn element.saneDetail ? 44 : 22;\n\t}\n\n\tgetTemplateId(element: IQuickPickElement): string {\n\t\tif (element instanceof QuickPickItemElement) {\n\t\t\treturn QuickPickItemElementRenderer.ID;\n\t\t} else {\n\t\t\treturn QuickPickSeparatorElementRenderer.ID;\n\t\t}\n\t}\n}\n\nclass QuickInputAccessibilityProvider implements IListAccessibilityProvider<IQuickPickElement> {\n\n\tgetWidgetAriaLabel(): string {\n\t\treturn localize('quickInput', \"Quick Input\");\n\t}\n\n\tgetAriaLabel(element: IQuickPickElement): string | null {\n\t\treturn element.separator?.label\n\t\t\t? `${element.saneAriaLabel}, ${element.separator.label}`\n\t\t\t: element.saneAriaLabel;\n\t}\n\n\tgetWidgetRole(): AriaRole {\n\t\treturn 'listbox';\n\t}\n\n\tgetRole(element: IQuickPickElement) {\n\t\treturn element.hasCheckbox ? 'checkbox' : 'option';\n\t}\n\n\tisChecked(element: IQuickPickElement): IValueWithChangeEvent<boolean> | undefined {\n\t\tif (!element.hasCheckbox || !(element instanceof QuickPickItemElement)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn {\n\t\t\tget value() { return element.checked; },\n\t\t\tonDidChange: e => element.onChecked(() => e()),\n\t\t};\n\t}\n}\n\nabstract class BaseQuickInputListRenderer<T extends IQuickPickElement> implements ITreeRenderer<T, void, IQuickInputItemTemplateData> {\n\tabstract templateId: string;\n\n\tconstructor(\n\t\tprivate readonly hoverDelegate: IHoverDelegate | undefined,\n\t\tprivate readonly toggleStyles: IToggleStyles\n\t) { }\n\n\t// TODO: only do the common stuff here and have a subclass handle their specific stuff\n\trenderTemplate(container: HTMLElement): IQuickInputItemTemplateData {\n\t\tconst data: IQuickInputItemTemplateData = Object.create(null);\n\t\tdata.toDisposeElement = new DisposableStore();\n\t\tdata.toDisposeTemplate = new DisposableStore();\n\t\tdata.entry = dom.append(container, $('.quick-input-list-entry'));\n\n\t\t// Checkbox\n\t\tconst label = dom.append(data.entry, $('label.quick-input-list-label'));\n\t\tdata.outerLabel = label;\n\t\tdata.checkbox = data.toDisposeTemplate.add(new MutableDisposable());\n\t\tdata.toDisposeTemplate.add(dom.addStandardDisposableListener(label, dom.EventType.CLICK, e => {\n\t\t\t// `label` elements with role=checkboxes don't automatically toggle them like normal <checkbox> elements\n\t\t\tif (data.checkbox.value && !e.defaultPrevented && data.checkbox.value.enabled) {\n\t\t\t\tconst checked = !data.checkbox.value.checked;\n\t\t\t\tdata.checkbox.value.checked = checked;\n\t\t\t\t(data.element as QuickPickItemElement).checked = checked;\n\t\t\t}\n\t\t}));\n\n\t\t// Rows\n\t\tconst rows = dom.append(label, $('.quick-input-list-rows'));\n\t\tconst row1 = dom.append(rows, $('.quick-input-list-row'));\n\t\tconst row2 = dom.append(rows, $('.quick-input-list-row'));\n\n\t\t// Label\n\t\tdata.label = new IconLabel(row1, { supportHighlights: true, supportDescriptionHighlights: true, supportIcons: true, hoverDelegate: this.hoverDelegate });\n\t\tdata.toDisposeTemplate.add(data.label);\n\t\tdata.icon = dom.prepend(data.label.element, $('.quick-input-list-icon'));\n\n\t\t// Keybinding\n\t\tconst keybindingContainer = dom.append(row1, $('.quick-input-list-entry-keybinding'));\n\t\tdata.keybinding = new KeybindingLabel(keybindingContainer, OS);\n\t\tdata.toDisposeTemplate.add(data.keybinding);\n\n\t\t// Detail\n\t\tconst detailContainer = dom.append(row2, $('.quick-input-list-label-meta'));\n\t\tdata.detail = new IconLabel(detailContainer, { supportHighlights: true, supportIcons: true, hoverDelegate: this.hoverDelegate });\n\t\tdata.toDisposeTemplate.add(data.detail);\n\n\t\t// Separator\n\t\tdata.separator = dom.append(data.entry, $('.quick-input-list-separator'));\n\n\t\t// Actions\n\t\tdata.actionBar = new ActionBar(data.entry, {\n\t\t\t...(this.hoverDelegate ? { hoverDelegate: this.hoverDelegate } : undefined),\n\t\t\tactionViewItemProvider: createToggleActionViewItemProvider(this.toggleStyles)\n\t\t});\n\t\tdata.actionBar.domNode.classList.add('quick-input-list-entry-action-bar');\n\t\tdata.toDisposeTemplate.add(data.actionBar);\n\n\t\treturn data;\n\t}\n\n\tdisposeTemplate(data: IQuickInputItemTemplateData): void {\n\t\tdata.toDisposeElement.dispose();\n\t\tdata.toDisposeTemplate.dispose();\n\t}\n\n\tdisposeElement(_element: ITreeNode<IQuickPickElement, void>, _index: number, data: IQuickInputItemTemplateData): void {\n\t\tdata.toDisposeElement.clear();\n\t\tdata.actionBar.clear();\n\t}\n\n\t// TODO: only do the common stuff here and have a subclass handle their specific stuff\n\tabstract renderElement(node: ITreeNode<IQuickPickElement, void>, index: number, data: IQuickInputItemTemplateData): void;\n}\n\nclass QuickPickItemElementRenderer extends BaseQuickInputListRenderer<QuickPickItemElement> {\n\tstatic readonly ID = 'quickpickitem';\n\n\t// Follow what we do in the separator renderer\n\tprivate readonly _itemsWithSeparatorsFrequency = new Map<QuickPickItemElement, number>();\n\n\tconstructor(\n\t\thoverDelegate: IHoverDelegate | undefined,\n\t\ttoggleStyles: IToggleStyles,\n\t\t@IThemeService private readonly themeService: IThemeService,\n\t) {\n\t\tsuper(hoverDelegate, toggleStyles);\n\t}\n\n\tget templateId() {\n\t\treturn QuickPickItemElementRenderer.ID;\n\t}\n\n\tprivate ensureCheckbox(element: QuickPickItemElement, data: IQuickInputItemTemplateData) {\n\t\tif (!element.hasCheckbox) {\n\t\t\tdata.checkbox.value?.domNode.remove();\n\t\t\tdata.checkbox.clear();\n\t\t\treturn;\n\t\t}\n\n\t\tlet checkbox = data.checkbox.value;\n\t\tif (!checkbox) {\n\t\t\tcheckbox = new Checkbox(element.saneLabel, element.checked, { ...defaultCheckboxStyles, size: 15 });\n\t\t\tdata.checkbox.value = checkbox;\n\t\t\tdata.outerLabel.prepend(checkbox.domNode);\n\t\t\t// Remove checkbox from tab order since tree items are navigable with arrow keys\n\t\t\t// This prevents the issue where pressing Space toggles both the tabbed checkbox and the focused item\n\t\t\tcheckbox.domNode.tabIndex = -1;\n\t\t} else {\n\t\t\tcheckbox.setTitle(element.saneLabel);\n\t\t}\n\n\t\tif (element.checkboxDisabled) {\n\t\t\tcheckbox.disable();\n\t\t} else {\n\t\t\tcheckbox.enable();\n\t\t}\n\n\t\tcheckbox.checked = element.checked;\n\t\tdata.toDisposeElement.add(element.onChecked(checked => checkbox.checked = checked));\n\t\tdata.toDisposeElement.add(checkbox.onChange(() => element.checked = checkbox.checked));\n\t}\n\n\trenderElement(node: ITreeNode<QuickPickItemElement, void>, index: number, data: IQuickInputItemTemplateData): void {\n\t\tconst element = node.element;\n\t\tdata.element = element;\n\t\telement.element = data.entry ?? undefined;\n\t\tconst mainItem: IQuickPickItem = element.item;\n\n\t\telement.element.classList.toggle('not-pickable', element.item.pickable === false);\n\n\t\tthis.ensureCheckbox(element, data);\n\n\t\tconst { labelHighlights, descriptionHighlights, detailHighlights } = element;\n\n\t\t// Icon\n\t\tif (mainItem.iconPath) {\n\t\t\tconst icon = isDark(this.themeService.getColorTheme().type) ? mainItem.iconPath.dark : (mainItem.iconPath.light ?? mainItem.iconPath.dark);\n\t\t\tconst iconUrl = URI.revive(icon);\n\t\t\tdata.icon.className = 'quick-input-list-icon';\n\t\t\tdata.icon.style.backgroundImage = cssJs.asCSSUrl(iconUrl);\n\t\t} else {\n\t\t\tdata.icon.style.backgroundImage = '';\n\t\t\tdata.icon.className = mainItem.iconClass ? `quick-input-list-icon ${mainItem.iconClass}` : '';\n\t\t}\n\n\t\t// Label\n\t\tlet descriptionTitle: IManagedHoverTooltipMarkdownString | undefined;\n\t\t// if we have a tooltip, that will be the hover,\n\t\t// with the saneDescription as fallback if it\n\t\t// is defined\n\t\tif (!element.saneTooltip && element.saneDescription) {\n\t\t\tdescriptionTitle = {\n\t\t\t\tmarkdown: {\n\t\t\t\t\tvalue: escape(element.saneDescription),\n\t\t\t\t\tsupportThemeIcons: true\n\t\t\t\t},\n\t\t\t\tmarkdownNotSupportedFallback: element.saneDescription\n\t\t\t};\n\t\t}\n\t\tconst options: IIconLabelValueOptions = {\n\t\t\tmatches: labelHighlights || [],\n\t\t\t// If we have a tooltip, we want that to be shown and not any other hover\n\t\t\tdescriptionTitle,\n\t\t\tdescriptionMatches: descriptionHighlights || [],\n\t\t\tlabelEscapeNewLines: true\n\t\t};\n\t\toptions.extraClasses = mainItem.iconClasses;\n\t\toptions.italic = mainItem.italic;\n\t\toptions.strikethrough = mainItem.strikethrough;\n\t\tdata.entry.classList.remove('quick-input-list-separator-as-item');\n\t\tdata.label.setLabel(element.saneLabel, element.saneDescription, options);\n\n\t\t// Keybinding\n\t\tdata.keybinding.set(mainItem.keybinding);\n\n\t\t// Detail\n\t\tif (element.saneDetail) {\n\t\t\tlet title: IManagedHoverTooltipMarkdownString | undefined;\n\t\t\t// If we have a tooltip, we want that to be shown and not any other hover\n\t\t\tif (!element.saneTooltip) {\n\t\t\t\ttitle = {\n\t\t\t\t\tmarkdown: {\n\t\t\t\t\t\tvalue: escape(element.saneDetail),\n\t\t\t\t\t\tsupportThemeIcons: true\n\t\t\t\t\t},\n\t\t\t\t\tmarkdownNotSupportedFallback: element.saneDetail\n\t\t\t\t};\n\t\t\t}\n\t\t\tdata.detail.element.style.display = '';\n\t\t\tdata.detail.setLabel(element.saneDetail, undefined, {\n\t\t\t\tmatches: detailHighlights,\n\t\t\t\ttitle,\n\t\t\t\tlabelEscapeNewLines: true\n\t\t\t});\n\t\t} else {\n\t\t\tdata.detail.element.style.display = 'none';\n\t\t}\n\n\t\t// Separator\n\t\tif (element.separator?.label) {\n\t\t\tdata.separator.textContent = element.separator.label;\n\t\t\tdata.separator.style.display = '';\n\t\t\tthis.addItemWithSeparator(element);\n\t\t} else {\n\t\t\tdata.separator.style.display = 'none';\n\t\t}\n\t\tdata.entry.classList.toggle('quick-input-list-separator-border', !!element.separator && element.childIndex !== 0);\n\n\t\t// Actions\n\t\tconst buttons = mainItem.buttons;\n\t\tif (buttons && buttons.length) {\n\t\t\tdata.actionBar.push(buttons.map((button, index) => quickInputButtonToAction(\n\t\t\t\tbutton,\n\t\t\t\t`id-${index}`,\n\t\t\t\t() => element.fireButtonTriggered({ button, item: element.item })\n\t\t\t)), { icon: true, label: false });\n\t\t\tdata.entry.classList.add('has-actions');\n\t\t} else {\n\t\t\tdata.entry.classList.remove('has-actions');\n\t\t}\n\t}\n\n\toverride disposeElement(element: ITreeNode<QuickPickItemElement, void>, _index: number, data: IQuickInputItemTemplateData): void {\n\t\tthis.removeItemWithSeparator(element.element);\n\t\tsuper.disposeElement(element, _index, data);\n\t}\n\n\tisItemWithSeparatorVisible(item: QuickPickItemElement): boolean {\n\t\treturn this._itemsWithSeparatorsFrequency.has(item);\n\t}\n\n\tprivate addItemWithSeparator(item: QuickPickItemElement): void {\n\t\tthis._itemsWithSeparatorsFrequency.set(item, (this._itemsWithSeparatorsFrequency.get(item) || 0) + 1);\n\t}\n\n\tprivate removeItemWithSeparator(item: QuickPickItemElement): void {\n\t\tconst frequency = this._itemsWithSeparatorsFrequency.get(item) || 0;\n\t\tif (frequency > 1) {\n\t\t\tthis._itemsWithSeparatorsFrequency.set(item, frequency - 1);\n\t\t} else {\n\t\t\tthis._itemsWithSeparatorsFrequency.delete(item);\n\t\t}\n\t}\n}\n\nclass QuickPickSeparatorElementRenderer extends BaseQuickInputListRenderer<QuickPickSeparatorElement> {\n\tstatic readonly ID = 'quickpickseparator';\n\n\t// This is a frequency map because sticky scroll re-uses the same renderer to render a second\n\t// instance of the same separator.\n\tprivate readonly _visibleSeparatorsFrequency = new Map<QuickPickSeparatorElement, number>();\n\n\tget templateId() {\n\t\treturn QuickPickSeparatorElementRenderer.ID;\n\t}\n\n\tget visibleSeparators(): QuickPickSeparatorElement[] {\n\t\treturn [...this._visibleSeparatorsFrequency.keys()];\n\t}\n\n\tisSeparatorVisible(separator: QuickPickSeparatorElement): boolean {\n\t\treturn this._visibleSeparatorsFrequency.has(separator);\n\t}\n\n\toverride renderElement(node: ITreeNode<QuickPickSeparatorElement, void>, index: number, data: IQuickInputItemTemplateData): void {\n\t\tconst element = node.element;\n\t\tdata.element = element;\n\t\telement.element = data.entry ?? undefined;\n\t\telement.element.classList.toggle('focus-inside', !!element.focusInsideSeparator);\n\t\tconst mainItem: IQuickPickSeparator = element.separator;\n\n\t\tconst { labelHighlights, descriptionHighlights } = element;\n\n\t\t// Icon\n\t\tdata.icon.style.backgroundImage = '';\n\t\tdata.icon.className = '';\n\n\t\t// Label\n\t\tlet descriptionTitle: IManagedHoverTooltipMarkdownString | undefined;\n\t\t// if we have a tooltip, that will be the hover,\n\t\t// with the saneDescription as fallback if it\n\t\t// is defined\n\t\tif (!element.saneTooltip && element.saneDescription) {\n\t\t\tdescriptionTitle = {\n\t\t\t\tmarkdown: {\n\t\t\t\t\tvalue: escape(element.saneDescription),\n\t\t\t\t\tsupportThemeIcons: true\n\t\t\t\t},\n\t\t\t\tmarkdownNotSupportedFallback: element.saneDescription\n\t\t\t};\n\t\t}\n\t\tconst options: IIconLabelValueOptions = {\n\t\t\tmatches: labelHighlights || [],\n\t\t\t// If we have a tooltip, we want that to be shown and not any other hover\n\t\t\tdescriptionTitle,\n\t\t\tdescriptionMatches: descriptionHighlights || [],\n\t\t\tlabelEscapeNewLines: true\n\t\t};\n\t\tdata.entry.classList.add('quick-input-list-separator-as-item');\n\t\tdata.label.setLabel(element.saneLabel, element.saneDescription, options);\n\n\t\t// Separator\n\t\tdata.separator.style.display = 'none';\n\t\tdata.entry.classList.add('quick-input-list-separator-border');\n\n\t\t// Actions\n\t\tconst buttons = mainItem.buttons;\n\t\tif (buttons && buttons.length) {\n\t\t\tdata.actionBar.push(buttons.map((button, index) => quickInputButtonToAction(\n\t\t\t\tbutton,\n\t\t\t\t`id-${index}`,\n\t\t\t\t() => element.fireSeparatorButtonTriggered({ button, separator: element.separator })\n\t\t\t)), { icon: true, label: false });\n\t\t\tdata.entry.classList.add('has-actions');\n\t\t} else {\n\t\t\tdata.entry.classList.remove('has-actions');\n\t\t}\n\n\t\tthis.addSeparator(element);\n\t}\n\n\toverride disposeElement(element: ITreeNode<QuickPickSeparatorElement, void>, _index: number, data: IQuickInputItemTemplateData): void {\n\t\tthis.removeSeparator(element.element);\n\t\tif (!this.isSeparatorVisible(element.element)) {\n\t\t\telement.element.element?.classList.remove('focus-inside');\n\t\t}\n\t\tsuper.disposeElement(element, _index, data);\n\t}\n\n\tprivate addSeparator(separator: QuickPickSeparatorElement): void {\n\t\tthis._visibleSeparatorsFrequency.set(separator, (this._visibleSeparatorsFrequency.get(separator) || 0) + 1);\n\t}\n\n\tprivate removeSeparator(separator: QuickPickSeparatorElement): void {\n\t\tconst frequency = this._visibleSeparatorsFrequency.get(separator) || 0;\n\t\tif (frequency > 1) {\n\t\t\tthis._visibleSeparatorsFrequency.set(separator, frequency - 1);\n\t\t} else {\n\t\t\tthis._visibleSeparatorsFrequency.delete(separator);\n\t\t}\n\t}\n}\n\nexport class QuickInputList extends Disposable {\n\n\t//#region QuickInputList Events\n\n\tprivate readonly _onKeyDown = new Emitter<StandardKeyboardEvent>();\n\n\tprivate readonly _onLeave = new Emitter<void>();\n\t/**\n\t * Event that is fired when the tree would no longer have focus.\n\t*/\n\treadonly onLeave: Event<void> = this._onLeave.event;\n\n\tprivate readonly _visibleCountObservable = observableValue('VisibleCount', 0);\n\treadonly onChangedVisibleCount: Event<number> = Event.fromObservable(this._visibleCountObservable, this._store);\n\n\tprivate readonly _allVisibleCheckedObservable = observableValue('AllVisibleChecked', false);\n\treadonly onChangedAllVisibleChecked: Event<boolean> = Event.fromObservable(this._allVisibleCheckedObservable, this._store);\n\n\tprivate readonly _checkedCountObservable = observableValue('CheckedCount', 0);\n\treadonly onChangedCheckedCount: Event<number> = Event.fromObservable(this._checkedCountObservable, this._store);\n\n\tprivate readonly _checkedElementsObservable = observableValueOpts({ equalsFn: equals }, new Array<IQuickPickItem>());\n\treadonly onChangedCheckedElements: Event<IQuickPickItem[]> = Event.fromObservable(this._checkedElementsObservable, this._store);\n\n\tprivate readonly _onButtonTriggered = new Emitter<IQuickPickItemButtonEvent<IQuickPickItem>>();\n\tonButtonTriggered = this._onButtonTriggered.event;\n\n\tprivate readonly _onSeparatorButtonTriggered = new Emitter<IQuickPickSeparatorButtonEvent>();\n\tonSeparatorButtonTriggered = this._onSeparatorButtonTriggered.event;\n\n\tprivate readonly _elementChecked = new Emitter<{ element: IQuickPickElement; checked: boolean }>();\n\tprivate readonly _elementCheckedEventBufferer = new EventBufferer();\n\n\t//#endregion\n\n\tprivate _hasCheckboxes = false;\n\n\tprivate readonly _container: HTMLElement;\n\tprivate readonly _tree: WorkbenchObjectTree<IQuickPickElement, void>;\n\tprivate readonly _separatorRenderer: QuickPickSeparatorElementRenderer;\n\tprivate readonly _itemRenderer: QuickPickItemElementRenderer;\n\tprivate _inputElements = new Array<QuickPickItem>();\n\tprivate _elementTree = new Array<IQuickPickElement>();\n\tprivate _itemElements = new Array<QuickPickItemElement>();\n\t// Elements that apply to the current set of elements\n\tprivate readonly _elementDisposable = this._register(new DisposableStore());\n\tprivate _lastHover: IHoverWidget | undefined;\n\tprivate _lastQueryString: string | undefined;\n\n\tconstructor(\n\t\tprivate parent: HTMLElement,\n\t\tprivate hoverDelegate: IHoverDelegate,\n\t\tprivate linkOpenerDelegate: (content: string) => void,\n\t\tid: string,\n\t\tprivate styles: IQuickInputStyles,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@IAccessibilityService private readonly accessibilityService: IAccessibilityService\n\t) {\n\t\tsuper();\n\t\tthis._container = dom.append(this.parent, $('.quick-input-list'));\n\t\tthis._separatorRenderer = new QuickPickSeparatorElementRenderer(hoverDelegate, this.styles.toggle);\n\t\tthis._itemRenderer = instantiationService.createInstance(QuickPickItemElementRenderer, hoverDelegate, this.styles.toggle);\n\t\tthis._tree = this._register(instantiationService.createInstance(\n\t\t\tWorkbenchObjectTree<IQuickPickElement, void>,\n\t\t\t'QuickInput',\n\t\t\tthis._container,\n\t\t\tnew QuickInputItemDelegate(),\n\t\t\t[this._itemRenderer, this._separatorRenderer],\n\t\t\t{\n\t\t\t\tfilter: {\n\t\t\t\t\tfilter(element) {\n\t\t\t\t\t\treturn element.hidden\n\t\t\t\t\t\t\t? TreeVisibility.Hidden\n\t\t\t\t\t\t\t: element instanceof QuickPickSeparatorElement\n\t\t\t\t\t\t\t\t? TreeVisibility.Recurse\n\t\t\t\t\t\t\t\t: TreeVisibility.Visible;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsorter: {\n\t\t\t\t\tcompare: (element, otherElement) => {\n\t\t\t\t\t\tif (!this.sortByLabel || !this._lastQueryString) {\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst normalizedSearchValue = this._lastQueryString.toLowerCase();\n\t\t\t\t\t\treturn compareEntries(element, otherElement, normalizedSearchValue);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\taccessibilityProvider: new QuickInputAccessibilityProvider(),\n\t\t\t\tsetRowLineHeight: false,\n\t\t\t\tmultipleSelectionSupport: false,\n\t\t\t\thideTwistiesOfChildlessElements: true,\n\t\t\t\trenderIndentGuides: RenderIndentGuides.None,\n\t\t\t\tfindWidgetEnabled: false,\n\t\t\t\tindent: 0,\n\t\t\t\thorizontalScrolling: false,\n\t\t\t\tallowNonCollapsibleParents: true,\n\t\t\t\talwaysConsumeMouseWheel: true\n\t\t\t}\n\t\t));\n\t\tthis._tree.getHTMLElement().id = id;\n\t\tthis._registerListeners();\n\t}\n\n\t//#region public getters/setters\n\n\t@memoize\n\tget onDidChangeFocus() {\n\t\treturn Event.map(\n\t\t\tthis._tree.onDidChangeFocus,\n\t\t\te => e.elements.filter((e): e is QuickPickItemElement => e instanceof QuickPickItemElement).map(e => e.item),\n\t\t\tthis._store\n\t\t);\n\t}\n\n\t@memoize\n\tget onDidChangeSelection() {\n\t\treturn Event.map(\n\t\t\tthis._tree.onDidChangeSelection,\n\t\t\te => ({\n\t\t\t\titems: e.elements.filter((e): e is QuickPickItemElement => e instanceof QuickPickItemElement).map(e => e.item),\n\t\t\t\tevent: e.browserEvent\n\t\t\t}),\n\t\t\tthis._store\n\t\t);\n\t}\n\n\tget displayed() {\n\t\treturn this._container.style.display !== 'none';\n\t}\n\n\tset displayed(value: boolean) {\n\t\tthis._container.style.display = value ? '' : 'none';\n\t}\n\n\tget scrollTop() {\n\t\treturn this._tree.scrollTop;\n\t}\n\n\tset scrollTop(scrollTop: number) {\n\t\tthis._tree.scrollTop = scrollTop;\n\t}\n\n\tget ariaLabel() {\n\t\treturn this._tree.ariaLabel;\n\t}\n\n\tset ariaLabel(label: string | null) {\n\t\tthis._tree.ariaLabel = label ?? '';\n\t}\n\n\tset enabled(value: boolean) {\n\t\tthis._tree.getHTMLElement().style.pointerEvents = value ? '' : 'none';\n\t}\n\n\tprivate _matchOnDescription = false;\n\tget matchOnDescription() {\n\t\treturn this._matchOnDescription;\n\t}\n\tset matchOnDescription(value: boolean) {\n\t\tthis._matchOnDescription = value;\n\t}\n\n\tprivate _matchOnDetail = false;\n\tget matchOnDetail() {\n\t\treturn this._matchOnDetail;\n\t}\n\tset matchOnDetail(value: boolean) {\n\t\tthis._matchOnDetail = value;\n\t}\n\n\tprivate _matchOnLabel = true;\n\tget matchOnLabel() {\n\t\treturn this._matchOnLabel;\n\t}\n\tset matchOnLabel(value: boolean) {\n\t\tthis._matchOnLabel = value;\n\t}\n\n\tprivate _matchOnLabelMode: 'fuzzy' | 'contiguous' = 'fuzzy';\n\tget matchOnLabelMode() {\n\t\treturn this._matchOnLabelMode;\n\t}\n\tset matchOnLabelMode(value: 'fuzzy' | 'contiguous') {\n\t\tthis._matchOnLabelMode = value;\n\t}\n\n\tprivate _sortByLabel = true;\n\tget sortByLabel() {\n\t\treturn this._sortByLabel;\n\t}\n\tset sortByLabel(value: boolean) {\n\t\tthis._sortByLabel = value;\n\t}\n\n\tprivate _shouldLoop = true;\n\tget shouldLoop() {\n\t\treturn this._shouldLoop;\n\t}\n\tset shouldLoop(value: boolean) {\n\t\tthis._shouldLoop = value;\n\t}\n\n\t//#endregion\n\n\t//#region register listeners\n\n\tprivate _registerListeners() {\n\t\tthis._registerOnKeyDown();\n\t\tthis._registerOnContainerClick();\n\t\tthis._registerOnMouseMiddleClick();\n\t\tthis._registerOnTreeModelChanged();\n\t\tthis._registerOnElementChecked();\n\t\tthis._registerOnContextMenu();\n\t\tthis._registerHoverListeners();\n\t\tthis._registerSelectionChangeListener();\n\t\tthis._registerSeparatorActionShowingListeners();\n\t}\n\n\tprivate _registerOnKeyDown() {\n\t\t// TODO: Should this be added at a higher level?\n\t\tthis._register(this._tree.onKeyDown(e => {\n\t\t\tconst event = new StandardKeyboardEvent(e);\n\t\t\tswitch (event.keyCode) {\n\t\t\t\tcase KeyCode.Space:\n\t\t\t\t\tthis.toggleCheckbox();\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis._onKeyDown.fire(event);\n\t\t}));\n\t}\n\n\tprivate _registerOnContainerClick() {\n\t\tthis._register(dom.addDisposableListener(this._container, dom.EventType.CLICK, e => {\n\t\t\tif (e.x || e.y) { // Avoid 'click' triggered by 'space' on checkbox.\n\t\t\t\tthis._onLeave.fire();\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate _registerOnMouseMiddleClick() {\n\t\tthis._register(dom.addDisposableListener(this._container, dom.EventType.AUXCLICK, e => {\n\t\t\tif (e.button === 1) {\n\t\t\t\tthis._onLeave.fire();\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate _registerOnTreeModelChanged() {\n\t\tthis._register(this._tree.onDidChangeModel(() => {\n\t\t\tconst visibleCount = this._itemElements.filter(e => !e.hidden).length;\n\t\t\tthis._visibleCountObservable.set(visibleCount, undefined);\n\t\t\tif (this._hasCheckboxes) {\n\t\t\t\tthis._updateCheckedObservables();\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate _registerOnElementChecked() {\n\t\t// Only fire the last event when buffered\n\t\tthis._register(this._elementCheckedEventBufferer.wrapEvent(this._elementChecked.event, (_, e) => e)(_ => this._updateCheckedObservables()));\n\t}\n\n\tprivate _registerOnContextMenu() {\n\t\tthis._register(this._tree.onContextMenu(e => {\n\t\t\tif (e.element) {\n\t\t\t\te.browserEvent.preventDefault();\n\n\t\t\t\t// we want to treat a context menu event as\n\t\t\t\t// a gesture to open the item at the index\n\t\t\t\t// since we do not have any context menu\n\t\t\t\t// this enables for example macOS to Ctrl-\n\t\t\t\t// click on an item to open it.\n\t\t\t\tthis._tree.setSelection([e.element]);\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate _registerHoverListeners() {\n\t\tconst delayer = this._register(new ThrottledDelayer(typeof this.hoverDelegate.delay === 'function' ? this.hoverDelegate.delay() : this.hoverDelegate.delay));\n\t\tthis._register(this._tree.onMouseOver(async e => {\n\t\t\t// If we hover over an anchor element, we don't want to show the hover because\n\t\t\t// the anchor may have a tooltip that we want to show instead.\n\t\t\tif (dom.isHTMLAnchorElement(e.browserEvent.target)) {\n\t\t\t\tdelayer.cancel();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (\n\t\t\t\t// anchors are an exception as called out above so we skip them here\n\t\t\t\t!(dom.isHTMLAnchorElement(e.browserEvent.relatedTarget)) &&\n\t\t\t\t// check if the mouse is still over the same element\n\t\t\t\tdom.isAncestor(e.browserEvent.relatedTarget as Node, e.element?.element as Node)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait delayer.trigger(async () => {\n\t\t\t\t\tif (e.element instanceof QuickPickItemElement) {\n\t\t\t\t\t\tthis.showHover(e.element);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\t// Ignore cancellation errors due to mouse out\n\t\t\t\tif (!isCancellationError(e)) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._tree.onMouseOut(e => {\n\t\t\t// onMouseOut triggers every time a new element has been moused over\n\t\t\t// even if it's on the same list item. We only want one event, so we\n\t\t\t// check if the mouse is still over the same element.\n\t\t\tif (dom.isAncestor(e.browserEvent.relatedTarget as Node, e.element?.element as Node)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdelayer.cancel();\n\t\t}));\n\t}\n\n\t/**\n\t * Register's focus change and mouse events so that we can track when items inside of a\n\t * separator's section are focused or hovered so that we can display the separator's actions\n\t */\n\tprivate _registerSeparatorActionShowingListeners() {\n\t\tthis._register(this._tree.onDidChangeFocus(e => {\n\t\t\tconst parent = e.elements[0]\n\t\t\t\t? this._tree.getParentElement(e.elements[0]) as QuickPickSeparatorElement\n\t\t\t\t// treat null as focus lost and when we have no separators\n\t\t\t\t: null;\n\t\t\tfor (const separator of this._separatorRenderer.visibleSeparators) {\n\t\t\t\tconst value = separator === parent;\n\t\t\t\t// get bitness of ACTIVE_ITEM and check if it changed\n\t\t\t\tconst currentActive = !!(separator.focusInsideSeparator & QuickPickSeparatorFocusReason.ACTIVE_ITEM);\n\t\t\t\tif (currentActive !== value) {\n\t\t\t\t\tif (value) {\n\t\t\t\t\t\tseparator.focusInsideSeparator |= QuickPickSeparatorFocusReason.ACTIVE_ITEM;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tseparator.focusInsideSeparator &= ~QuickPickSeparatorFocusReason.ACTIVE_ITEM;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._tree.rerender(separator);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._tree.onMouseOver(e => {\n\t\t\tconst parent = e.element\n\t\t\t\t? this._tree.getParentElement(e.element) as QuickPickSeparatorElement\n\t\t\t\t: null;\n\t\t\tfor (const separator of this._separatorRenderer.visibleSeparators) {\n\t\t\t\tif (separator !== parent) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst currentMouse = !!(separator.focusInsideSeparator & QuickPickSeparatorFocusReason.MOUSE_HOVER);\n\t\t\t\tif (!currentMouse) {\n\t\t\t\t\tseparator.focusInsideSeparator |= QuickPickSeparatorFocusReason.MOUSE_HOVER;\n\t\t\t\t\tthis._tree.rerender(separator);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._tree.onMouseOut(e => {\n\t\t\tconst parent = e.element\n\t\t\t\t? this._tree.getParentElement(e.element) as QuickPickSeparatorElement\n\t\t\t\t: null;\n\t\t\tfor (const separator of this._separatorRenderer.visibleSeparators) {\n\t\t\t\tif (separator !== parent) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst currentMouse = !!(separator.focusInsideSeparator & QuickPickSeparatorFocusReason.MOUSE_HOVER);\n\t\t\t\tif (currentMouse) {\n\t\t\t\t\tseparator.focusInsideSeparator &= ~QuickPickSeparatorFocusReason.MOUSE_HOVER;\n\t\t\t\t\tthis._tree.rerender(separator);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate _registerSelectionChangeListener() {\n\t\t// When the user selects a separator, the separator will move to the top and focus will be\n\t\t// set to the first element after the separator.\n\t\tthis._register(this._tree.onDidChangeSelection(e => {\n\t\t\tconst elementsWithoutSeparators = e.elements.filter((e): e is QuickPickItemElement => e instanceof QuickPickItemElement);\n\t\t\tif (elementsWithoutSeparators.length !== e.elements.length) {\n\t\t\t\tif (e.elements.length === 1 && e.elements[0] instanceof QuickPickSeparatorElement) {\n\t\t\t\t\tthis._tree.setFocus([e.elements[0].children[0]]);\n\t\t\t\t\tthis._tree.reveal(e.elements[0], 0);\n\t\t\t\t}\n\t\t\t\tthis._tree.setSelection(elementsWithoutSeparators);\n\t\t\t}\n\t\t}));\n\t}\n\n\t//#endregion\n\n\t//#region public methods\n\n\tsetAllVisibleChecked(checked: boolean) {\n\t\tthis._elementCheckedEventBufferer.bufferEvents(() => {\n\t\t\tthis._itemElements.forEach(element => {\n\t\t\t\tif (!element.hidden && !element.checkboxDisabled && element.item.pickable !== false) {\n\t\t\t\t\t// Would fire an event if we didn't beffer the events\n\t\t\t\t\telement.checked = checked;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tsetElements(inputElements: QuickPickItem[]): void {\n\t\tthis._elementDisposable.clear();\n\t\tthis._lastQueryString = undefined;\n\t\tthis._inputElements = inputElements;\n\t\tthis._hasCheckboxes = this.parent.classList.contains('show-checkboxes');\n\t\tlet currentSeparatorElement: QuickPickSeparatorElement | undefined;\n\t\tthis._itemElements = new Array<QuickPickItemElement>();\n\t\tthis._elementTree = inputElements.reduce((result, item, index) => {\n\t\t\tlet element: IQuickPickElement;\n\t\t\tif (item.type === 'separator') {\n\t\t\t\tif (!item.buttons) {\n\t\t\t\t\t// This separator will be rendered as a part of the list item\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tcurrentSeparatorElement = new QuickPickSeparatorElement(\n\t\t\t\t\tindex,\n\t\t\t\t\te => this._onSeparatorButtonTriggered.fire(e),\n\t\t\t\t\titem\n\t\t\t\t);\n\t\t\t\telement = currentSeparatorElement;\n\t\t\t} else {\n\t\t\t\tconst previous = index > 0 ? inputElements[index - 1] : undefined;\n\t\t\t\tlet separator: IQuickPickSeparator | undefined;\n\t\t\t\tif (previous && previous.type === 'separator' && !previous.buttons) {\n\t\t\t\t\tseparator = previous;\n\t\t\t\t}\n\t\t\t\tconst qpi = new QuickPickItemElement(\n\t\t\t\t\tindex,\n\t\t\t\t\tcurrentSeparatorElement?.children\n\t\t\t\t\t\t? currentSeparatorElement.children.length\n\t\t\t\t\t\t: index,\n\t\t\t\t\tthis._hasCheckboxes && item.pickable !== false,\n\t\t\t\t\te => this._onButtonTriggered.fire(e),\n\t\t\t\t\tthis._elementChecked,\n\t\t\t\t\titem,\n\t\t\t\t\tseparator,\n\t\t\t\t);\n\t\t\t\tthis._itemElements.push(qpi);\n\n\t\t\t\tif (currentSeparatorElement) {\n\t\t\t\t\tcurrentSeparatorElement.children.push(qpi);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\telement = qpi;\n\t\t\t}\n\n\t\t\tresult.push(element);\n\t\t\treturn result;\n\t\t}, new Array<IQuickPickElement>());\n\n\t\tthis._setElementsToTree(this._elementTree);\n\n\t\t// Accessibility hack, unfortunately on next tick\n\t\t// https://github.com/microsoft/vscode/issues/211976\n\t\tif (this.accessibilityService.isScreenReaderOptimized()) {\n\t\t\tsetTimeout(() => {\n\t\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\t\tconst focusedElement = this._tree.getHTMLElement().querySelector(`.monaco-list-row.focused`);\n\t\t\t\tconst parent = focusedElement?.parentNode;\n\t\t\t\tif (focusedElement && parent) {\n\t\t\t\t\tconst nextSibling = focusedElement.nextSibling;\n\t\t\t\t\tfocusedElement.remove();\n\t\t\t\t\tparent.insertBefore(focusedElement, nextSibling);\n\t\t\t\t}\n\t\t\t}, 0);\n\t\t}\n\t}\n\n\tsetFocusedElements(items: IQuickPickItem[]) {\n\t\tconst elements = items.map(item => this._itemElements.find(e => e.item === item))\n\t\t\t.filter((e): e is QuickPickItemElement => !!e)\n\t\t\t.filter(e => !e.hidden);\n\t\tthis._tree.setFocus(elements);\n\t\tif (items.length > 0) {\n\t\t\tconst focused = this._tree.getFocus()[0];\n\t\t\tif (focused) {\n\t\t\t\tthis._tree.reveal(focused);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetActiveDescendant() {\n\t\treturn this._tree.getHTMLElement().getAttribute('aria-activedescendant');\n\t}\n\n\tsetSelectedElements(items: IQuickPickItem[]) {\n\t\tconst elements = items.map(item => this._itemElements.find(e => e.item === item))\n\t\t\t.filter((e): e is QuickPickItemElement => !!e);\n\t\tthis._tree.setSelection(elements);\n\t}\n\n\tgetCheckedElements() {\n\t\treturn this._itemElements.filter(e => e.checked)\n\t\t\t.map(e => e.item);\n\t}\n\n\tsetCheckedElements(items: IQuickPickItem[]) {\n\t\tthis._elementCheckedEventBufferer.bufferEvents(() => {\n\t\t\tconst checked = new Set();\n\t\t\tfor (const item of items) {\n\t\t\t\tchecked.add(item);\n\t\t\t}\n\t\t\tfor (const element of this._itemElements) {\n\t\t\t\t// Would fire an event if we didn't beffer the events\n\t\t\t\telement.checked = checked.has(element.item);\n\t\t\t}\n\t\t});\n\t}\n\n\tfocus(what: QuickPickFocus): void {\n\t\tif (!this._itemElements.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (what === QuickPickFocus.Second && this._itemElements.length < 2) {\n\t\t\twhat = QuickPickFocus.First;\n\t\t}\n\n\t\tswitch (what) {\n\t\t\tcase QuickPickFocus.First:\n\t\t\t\tthis._tree.scrollTop = 0;\n\t\t\t\tthis._tree.focusFirst(undefined, (e) => e.element instanceof QuickPickItemElement);\n\t\t\t\tbreak;\n\t\t\tcase QuickPickFocus.Second: {\n\t\t\t\tthis._tree.scrollTop = 0;\n\t\t\t\tlet isSecondItem = false;\n\t\t\t\tthis._tree.focusFirst(undefined, (e) => {\n\t\t\t\t\tif (!(e.element instanceof QuickPickItemElement)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (isSecondItem) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tisSecondItem = !isSecondItem;\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase QuickPickFocus.Last:\n\t\t\t\tthis._tree.scrollTop = this._tree.scrollHeight;\n\t\t\t\tthis._tree.focusLast(undefined, (e) => e.element instanceof QuickPickItemElement);\n\t\t\t\tbreak;\n\t\t\tcase QuickPickFocus.Next: {\n\t\t\t\tconst prevFocus = this._tree.getFocus();\n\t\t\t\tthis._tree.focusNext(undefined, this._shouldLoop, undefined, (e) => {\n\t\t\t\t\tif (!(e.element instanceof QuickPickItemElement)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tthis._tree.reveal(e.element);\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t\tconst currentFocus = this._tree.getFocus();\n\t\t\t\tif (prevFocus.length && prevFocus[0] === currentFocus[0]) {\n\t\t\t\t\tthis._onLeave.fire();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase QuickPickFocus.Previous: {\n\t\t\t\tconst prevFocus = this._tree.getFocus();\n\t\t\t\tthis._tree.focusPrevious(undefined, this._shouldLoop, undefined, (e) => {\n\t\t\t\t\tif (!(e.element instanceof QuickPickItemElement)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tconst parent = this._tree.getParentElement(e.element);\n\t\t\t\t\tif (parent === null || (parent as QuickPickSeparatorElement).children[0] !== e.element) {\n\t\t\t\t\t\tthis._tree.reveal(e.element);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Only if we are the first child of a separator do we reveal the separator\n\t\t\t\t\t\tthis._tree.reveal(parent);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t\tconst currentFocus = this._tree.getFocus();\n\t\t\t\tif (prevFocus.length && prevFocus[0] === currentFocus[0]) {\n\t\t\t\t\tthis._onLeave.fire();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase QuickPickFocus.NextPage:\n\t\t\t\tthis._tree.focusNextPage(undefined, (e) => {\n\t\t\t\t\tif (!(e.element instanceof QuickPickItemElement)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tthis._tree.reveal(e.element);\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase QuickPickFocus.PreviousPage:\n\t\t\t\tthis._tree.focusPreviousPage(undefined, (e) => {\n\t\t\t\t\tif (!(e.element instanceof QuickPickItemElement)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tconst parent = this._tree.getParentElement(e.element);\n\t\t\t\t\tif (parent === null || (parent as QuickPickSeparatorElement).children[0] !== e.element) {\n\t\t\t\t\t\tthis._tree.reveal(e.element);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._tree.reveal(parent);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase QuickPickFocus.NextSeparator: {\n\t\t\t\tlet foundSeparatorAsItem = false;\n\t\t\t\tconst before = this._tree.getFocus()[0];\n\t\t\t\tthis._tree.focusNext(undefined, true, undefined, (e) => {\n\t\t\t\t\tif (foundSeparatorAsItem) {\n\t\t\t\t\t\t// This should be the index right after the separator so it\n\t\t\t\t\t\t// is the item we want to focus.\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (e.element instanceof QuickPickSeparatorElement) {\n\t\t\t\t\t\tfoundSeparatorAsItem = true;\n\t\t\t\t\t\t// If the separator is visible, then we should just reveal its first child so it's not as jarring.\n\t\t\t\t\t\tif (this._separatorRenderer.isSeparatorVisible(e.element)) {\n\t\t\t\t\t\t\tthis._tree.reveal(e.element.children[0]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// If the separator is not visible, then we should\n\t\t\t\t\t\t\t// push it up to the top of the list.\n\t\t\t\t\t\t\tthis._tree.reveal(e.element, 0);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (e.element instanceof QuickPickItemElement) {\n\t\t\t\t\t\tif (e.element.separator) {\n\t\t\t\t\t\t\tif (this._itemRenderer.isItemWithSeparatorVisible(e.element)) {\n\t\t\t\t\t\t\t\tthis._tree.reveal(e.element);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis._tree.reveal(e.element, 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} else if (e.element === this._elementTree[0]) {\n\t\t\t\t\t\t\t// We should stop at the first item in the list if it's a regular item.\n\t\t\t\t\t\t\tthis._tree.reveal(e.element, 0);\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tconst after = this._tree.getFocus()[0];\n\t\t\t\tif (before === after) {\n\t\t\t\t\t// If we didn't move, then we should just move to the end\n\t\t\t\t\t// of the list.\n\t\t\t\t\tthis._tree.scrollTop = this._tree.scrollHeight;\n\t\t\t\t\tthis._tree.focusLast(undefined, (e) => e.element instanceof QuickPickItemElement);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase QuickPickFocus.PreviousSeparator: {\n\t\t\t\tlet focusElement: IQuickPickElement | undefined;\n\t\t\t\t// If we are already sitting on an inline separator, then we\n\t\t\t\t// have already found the _current_ separator and need to\n\t\t\t\t// move to the previous one.\n\t\t\t\tlet foundSeparator = !!this._tree.getFocus()[0]?.separator;\n\t\t\t\tthis._tree.focusPrevious(undefined, true, undefined, (e) => {\n\t\t\t\t\tif (e.element instanceof QuickPickSeparatorElement) {\n\t\t\t\t\t\tif (foundSeparator) {\n\t\t\t\t\t\t\tif (!focusElement) {\n\t\t\t\t\t\t\t\tif (this._separatorRenderer.isSeparatorVisible(e.element)) {\n\t\t\t\t\t\t\t\t\tthis._tree.reveal(e.element);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis._tree.reveal(e.element, 0);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfocusElement = e.element.children[0];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfoundSeparator = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (e.element instanceof QuickPickItemElement) {\n\t\t\t\t\t\tif (!focusElement) {\n\t\t\t\t\t\t\tif (e.element.separator) {\n\t\t\t\t\t\t\t\tif (this._itemRenderer.isItemWithSeparatorVisible(e.element)) {\n\t\t\t\t\t\t\t\t\tthis._tree.reveal(e.element);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis._tree.reveal(e.element, 0);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tfocusElement = e.element;\n\t\t\t\t\t\t\t} else if (e.element === this._elementTree[0]) {\n\t\t\t\t\t\t\t\t// We should stop at the first item in the list if it's a regular item.\n\t\t\t\t\t\t\t\tthis._tree.reveal(e.element, 0);\n\t\t\t\t\t\t\t\treturn true;\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\treturn false;\n\t\t\t\t});\n\t\t\t\tif (focusElement) {\n\t\t\t\t\tthis._tree.setFocus([focusElement]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tclearFocus() {\n\t\tthis._tree.setFocus([]);\n\t}\n\n\tdomFocus() {\n\t\tthis._tree.domFocus();\n\t}\n\n\tlayout(maxHeight?: number): void {\n\t\tthis._tree.getHTMLElement().style.maxHeight = maxHeight ? `${\n\t\t\t// Make sure height aligns with list item heights\n\t\t\tMath.floor(maxHeight / 44) * 44\n\t\t\t// Add some extra height so that it's clear there's more to scroll\n\t\t\t+ 6\n\t\t\t}px` : '';\n\t\tthis._tree.layout();\n\t}\n\n\tfilter(query: string): boolean {\n\t\tthis._lastQueryString = query;\n\t\tif (!(this._sortByLabel || this._matchOnLabel || this._matchOnDescription || this._matchOnDetail)) {\n\t\t\tthis._tree.layout();\n\t\t\treturn false;\n\t\t}\n\n\t\tconst queryWithWhitespace = query;\n\t\tquery = query.trim();\n\n\t\t// Reset filtering\n\t\tif (!query || !(this.matchOnLabel || this.matchOnDescription || this.matchOnDetail)) {\n\t\t\tthis._itemElements.forEach(element => {\n\t\t\t\telement.labelHighlights = undefined;\n\t\t\t\telement.descriptionHighlights = undefined;\n\t\t\t\telement.detailHighlights = undefined;\n\t\t\t\telement.hidden = false;\n\t\t\t\tconst previous = element.index && this._inputElements[element.index - 1];\n\t\t\t\tif (element.item) {\n\t\t\t\t\telement.separator = previous && previous.type === 'separator' && !previous.buttons ? previous : undefined;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Filter by value (since we support icons in labels, use $(..) aware fuzzy matching)\n\t\telse {\n\t\t\tlet currentSeparator: IQuickPickSeparator | undefined;\n\t\t\tthis._itemElements.forEach(element => {\n\t\t\t\tlet labelHighlights: IMatch[] | undefined;\n\t\t\t\tif (this.matchOnLabelMode === 'fuzzy') {\n\t\t\t\t\tlabelHighlights = this.matchOnLabel ? matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneLabel)) ?? undefined : undefined;\n\t\t\t\t} else {\n\t\t\t\t\tlabelHighlights = this.matchOnLabel ? matchesContiguousIconAware(queryWithWhitespace, parseLabelWithIcons(element.saneLabel)) ?? undefined : undefined;\n\t\t\t\t}\n\t\t\t\tconst descriptionHighlights = this.matchOnDescription ? matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneDescription || '')) ?? undefined : undefined;\n\t\t\t\tconst detailHighlights = this.matchOnDetail ? matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneDetail || '')) ?? undefined : undefined;\n\n\t\t\t\tif (labelHighlights || descriptionHighlights || detailHighlights) {\n\t\t\t\t\telement.labelHighlights = labelHighlights;\n\t\t\t\t\telement.descriptionHighlights = descriptionHighlights;\n\t\t\t\t\telement.detailHighlights = detailHighlights;\n\t\t\t\t\telement.hidden = false;\n\t\t\t\t} else {\n\t\t\t\t\telement.labelHighlights = undefined;\n\t\t\t\t\telement.descriptionHighlights = undefined;\n\t\t\t\t\telement.detailHighlights = undefined;\n\t\t\t\t\telement.hidden = element.item ? !element.item.alwaysShow : true;\n\t\t\t\t}\n\n\t\t\t\t// Ensure separators are filtered out first before deciding if we need to bring them back\n\t\t\t\tif (element.item) {\n\t\t\t\t\telement.separator = undefined;\n\t\t\t\t} else if (element.separator) {\n\t\t\t\t\telement.hidden = true;\n\t\t\t\t}\n\n\t\t\t\t// we can show the separator unless the list gets sorted by match\n\t\t\t\tif (!this.sortByLabel) {\n\t\t\t\t\tconst previous = element.index && this._inputElements[element.index - 1] || undefined;\n\t\t\t\t\tif (previous?.type === 'separator' && !previous.buttons) {\n\t\t\t\t\t\tcurrentSeparator = previous;\n\t\t\t\t\t}\n\t\t\t\t\tif (currentSeparator && !element.hidden) {\n\t\t\t\t\t\telement.separator = currentSeparator;\n\t\t\t\t\t\tcurrentSeparator = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis._setElementsToTree(this._sortByLabel && query\n\t\t\t// We don't render any separators if we're sorting so just render the elements\n\t\t\t? this._itemElements\n\t\t\t// Render the full tree\n\t\t\t: this._elementTree\n\t\t);\n\t\tthis._tree.layout();\n\t\treturn true;\n\t}\n\n\ttoggleCheckbox() {\n\t\tthis._elementCheckedEventBufferer.bufferEvents(() => {\n\t\t\tconst elements = this._tree.getFocus().filter((e): e is QuickPickItemElement => e instanceof QuickPickItemElement);\n\t\t\tconst allChecked = this._allVisibleChecked(elements);\n\t\t\tfor (const element of elements) {\n\t\t\t\tif (!element.checkboxDisabled) {\n\t\t\t\t\t// Would fire an event if we didn't have the flag set\n\t\t\t\t\telement.checked = !allChecked;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tstyle(styles: IListStyles) {\n\t\tthis._tree.style(styles);\n\t}\n\n\ttoggleHover() {\n\t\tconst focused: IQuickPickElement | null = this._tree.getFocus()[0];\n\t\tif (!focused?.saneTooltip || !(focused instanceof QuickPickItemElement)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// if there's a hover already, hide it (toggle off)\n\t\tif (this._lastHover && !this._lastHover.isDisposed) {\n\t\t\tthis._lastHover.dispose();\n\t\t\treturn;\n\t\t}\n\n\t\t// If there is no hover, show it (toggle on)\n\t\tthis.showHover(focused);\n\t\tconst store = new DisposableStore();\n\t\tstore.add(this._tree.onDidChangeFocus(e => {\n\t\t\tif (e.elements[0] instanceof QuickPickItemElement) {\n\t\t\t\tthis.showHover(e.elements[0]);\n\t\t\t}\n\t\t}));\n\t\tif (this._lastHover) {\n\t\t\tstore.add(this._lastHover);\n\t\t}\n\t\tthis._elementDisposable.add(store);\n\t}\n\n\t//#endregion\n\n\t//#region private methods\n\n\tprivate _setElementsToTree(elements: IQuickPickElement[]) {\n\t\tconst treeElements = new Array<IObjectTreeElement<IQuickPickElement>>();\n\t\tfor (const element of elements) {\n\t\t\tif (element instanceof QuickPickSeparatorElement) {\n\t\t\t\ttreeElements.push({\n\t\t\t\t\telement,\n\t\t\t\t\tcollapsible: false,\n\t\t\t\t\tcollapsed: false,\n\t\t\t\t\tchildren: element.children.map(e => ({\n\t\t\t\t\t\telement: e,\n\t\t\t\t\t\tcollapsible: false,\n\t\t\t\t\t\tcollapsed: false,\n\t\t\t\t\t})),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttreeElements.push({\n\t\t\t\t\telement,\n\t\t\t\t\tcollapsible: false,\n\t\t\t\t\tcollapsed: false,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis._tree.setChildren(null, treeElements);\n\t}\n\n\tprivate _allVisibleChecked(elements: QuickPickItemElement[], whenNoneVisible = true) {\n\t\tfor (let i = 0, n = elements.length; i < n; i++) {\n\t\t\tconst element = elements[i];\n\t\t\tif (!element.hidden && element.item.pickable !== false) {\n\t\t\t\tif (!element.checked) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\twhenNoneVisible = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn whenNoneVisible;\n\t}\n\n\tprivate _updateCheckedObservables() {\n\t\ttransaction((tx) => {\n\t\t\tthis._allVisibleCheckedObservable.set(this._allVisibleChecked(this._itemElements, false), tx);\n\t\t\tconst checkedCount = this._itemElements.filter(element => element.checked).length;\n\t\t\tthis._checkedCountObservable.set(checkedCount, tx);\n\t\t\tthis._checkedElementsObservable.set(this.getCheckedElements(), tx);\n\t\t});\n\t}\n\n\t/**\n\t * Disposes of the hover and shows a new one for the given index if it has a tooltip.\n\t * @param element The element to show the hover for\n\t */\n\tprivate showHover(element: QuickPickItemElement): void {\n\t\tif (this._lastHover && !this._lastHover.isDisposed) {\n\t\t\tthis.hoverDelegate.onDidHideHover?.();\n\t\t\tthis._lastHover?.dispose();\n\t\t}\n\n\t\tif (!element.element || !element.saneTooltip) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lastHover = this.hoverDelegate.showHover({\n\t\t\tcontent: element.saneTooltip,\n\t\t\ttarget: element.element,\n\t\t\tlinkHandler: (url) => {\n\t\t\t\tthis.linkOpenerDelegate(url);\n\t\t\t},\n\t\t\tappearance: {\n\t\t\t\tshowPointer: true,\n\t\t\t},\n\t\t\tcontainer: this._container,\n\t\t\tposition: {\n\t\t\t\thoverPosition: HoverPosition.RIGHT\n\t\t\t}\n\t\t}, false);\n\t}\n}\n\nfunction matchesContiguousIconAware(query: string, target: IParsedLabelWithIcons): IMatch[] | null {\n\n\tconst { text, iconOffsets } = target;\n\n\t// Return early if there are no icon markers in the word to match against\n\tif (!iconOffsets || iconOffsets.length === 0) {\n\t\treturn matchesContiguous(query, text);\n\t}\n\n\t// Trim the word to match against because it could have leading\n\t// whitespace now if the word started with an icon\n\tconst wordToMatchAgainstWithoutIconsTrimmed = ltrim(text, ' ');\n\tconst leadingWhitespaceOffset = text.length - wordToMatchAgainstWithoutIconsTrimmed.length;\n\n\t// match on value without icon\n\tconst matches = matchesContiguous(query, wordToMatchAgainstWithoutIconsTrimmed);\n\n\t// Map matches back to offsets with icon and trimming\n\tif (matches) {\n\t\tfor (const match of matches) {\n\t\t\tconst iconOffset = iconOffsets[match.start + leadingWhitespaceOffset] /* icon offsets at index */ + leadingWhitespaceOffset /* overall leading whitespace offset */;\n\t\t\tmatch.start += iconOffset;\n\t\t\tmatch.end += iconOffset;\n\t\t}\n\t}\n\n\treturn matches;\n}\n\nfunction matchesContiguous(word: string, wordToMatchAgainst: string): IMatch[] | null {\n\tconst matchIndex = wordToMatchAgainst.toLowerCase().indexOf(word.toLowerCase());\n\tif (matchIndex !== -1) {\n\t\treturn [{ start: matchIndex, end: matchIndex + word.length }];\n\t}\n\treturn null;\n}\n\nfunction compareEntries(elementA: IQuickPickElement, elementB: IQuickPickElement, lookFor: string): number {\n\n\tconst labelHighlightsA = elementA.labelHighlights || [];\n\tconst labelHighlightsB = elementB.labelHighlights || [];\n\tif (labelHighlightsA.length && !labelHighlightsB.length) {\n\t\treturn -1;\n\t}\n\n\tif (!labelHighlightsA.length && labelHighlightsB.length) {\n\t\treturn 1;\n\t}\n\n\tif (labelHighlightsA.length === 0 && labelHighlightsB.length === 0) {\n\t\treturn 0;\n\t}\n\n\treturn compareAnything(elementA.saneSortLabel, elementB.saneSortLabel, lookFor);\n}\n"]}
@@ -33,19 +33,47 @@ function getIconClass(iconPath) {
33
33
  }
34
34
  return iconClass;
35
35
  }
36
+ class QuickInputToggleButtonAction {
37
+ constructor(id, label, tooltip, className, enabled, _checked, run) {
38
+ this.id = id;
39
+ this.label = label;
40
+ this.tooltip = tooltip;
41
+ this.enabled = enabled;
42
+ this._checked = _checked;
43
+ this.run = run;
44
+ this.class = className;
45
+ }
46
+ get checked() {
47
+ return this._checked;
48
+ }
49
+ set checked(value) {
50
+ this._checked = value;
51
+ // Toggles behave like buttons. When clicked, they run... the only difference is that their checked state also changes.
52
+ this.run();
53
+ }
54
+ }
36
55
  export function quickInputButtonToAction(button, id, run) {
37
56
  let cssClasses = button.iconClass || getIconClass(button.iconPath);
38
57
  if (button.alwaysVisible) {
39
58
  cssClasses = cssClasses ? `${cssClasses} always-visible` : 'always-visible';
40
59
  }
41
- return {
42
- id,
43
- label: '',
44
- tooltip: button.tooltip || '',
45
- class: cssClasses,
46
- enabled: true,
47
- run
60
+ const handler = () => {
61
+ if (button.toggle) {
62
+ button.toggle.checked = !button.toggle.checked;
63
+ }
64
+ return run();
48
65
  };
66
+ const action = button.toggle
67
+ ? new QuickInputToggleButtonAction(id, '', button.tooltip || '', cssClasses, true, button.toggle.checked, handler)
68
+ : {
69
+ id,
70
+ label: '',
71
+ tooltip: button.tooltip || '',
72
+ class: cssClasses,
73
+ enabled: true,
74
+ run: handler,
75
+ };
76
+ return action;
49
77
  }
50
78
  export function renderQuickInputDescription(description, container, actionHandler) {
51
79
  dom.reset(container);
@@ -58,7 +86,7 @@ export function renderQuickInputDescription(description, container, actionHandle
58
86
  else {
59
87
  let title = node.title;
60
88
  if (!title && node.href.startsWith('command:')) {
61
- title = localize(1790, "Click to execute command '{0}'", node.href.substring('command:'.length));
89
+ title = localize(1791, "Click to execute command '{0}'", node.href.substring('command:'.length));
62
90
  }
63
91
  else if (!title) {
64
92
  title = node.href;