monaco-editor-core 0.55.0-dev-20251023 → 0.55.0-dev-20251024

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 (45) hide show
  1. package/esm/nls.messages.cs.js +1 -1
  2. package/esm/nls.messages.de.js +1 -1
  3. package/esm/nls.messages.es.js +1 -1
  4. package/esm/nls.messages.fr.js +1 -1
  5. package/esm/nls.messages.it.js +1 -1
  6. package/esm/nls.messages.ja.js +1 -1
  7. package/esm/nls.messages.ko.js +1 -1
  8. package/esm/nls.messages.pl.js +1 -1
  9. package/esm/nls.messages.pt-br.js +1 -1
  10. package/esm/nls.messages.ru.js +1 -1
  11. package/esm/nls.messages.tr.js +1 -1
  12. package/esm/nls.messages.zh-cn.js +1 -1
  13. package/esm/nls.messages.zh-tw.js +1 -1
  14. package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  15. package/esm/vs/base/browser/ui/iconLabel/iconlabel.css +2 -0
  16. package/esm/vs/base/browser/ui/toggle/toggle.js +2 -2
  17. package/esm/vs/base/browser/ui/toggle/toggle.js.map +1 -1
  18. package/esm/vs/base/browser/ui/tree/compressedObjectTreeModel.js +7 -0
  19. package/esm/vs/base/browser/ui/tree/compressedObjectTreeModel.js.map +1 -1
  20. package/esm/vs/base/browser/ui/tree/objectTree.js +3 -0
  21. package/esm/vs/base/browser/ui/tree/objectTree.js.map +1 -1
  22. package/esm/vs/base/browser/ui/tree/objectTreeModel.js +20 -0
  23. package/esm/vs/base/browser/ui/tree/objectTreeModel.js.map +1 -1
  24. package/esm/vs/base/common/codiconsLibrary.js +2 -0
  25. package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
  26. package/esm/vs/base/common/network.js +5 -1
  27. package/esm/vs/base/common/network.js.map +1 -1
  28. package/esm/vs/base/common/platform.js +0 -1
  29. package/esm/vs/base/common/platform.js.map +1 -1
  30. package/esm/vs/platform/configuration/common/configurationRegistry.js +12 -0
  31. package/esm/vs/platform/configuration/common/configurationRegistry.js.map +1 -1
  32. package/esm/vs/platform/quickinput/browser/quickInput.js +2 -0
  33. package/esm/vs/platform/quickinput/browser/quickInput.js.map +1 -1
  34. package/esm/vs/platform/quickinput/browser/quickInputController.js +6 -0
  35. package/esm/vs/platform/quickinput/browser/quickInputController.js.map +1 -1
  36. package/esm/vs/platform/quickinput/browser/tree/quickInputTree.js +9 -9
  37. package/esm/vs/platform/quickinput/browser/tree/quickInputTree.js.map +1 -1
  38. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
  39. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js.map +1 -1
  40. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeController.js +19 -26
  41. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeController.js.map +1 -1
  42. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeSorter.js +46 -0
  43. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeSorter.js.map +1 -0
  44. package/esm/vs/platform/quickinput/common/quickInput.js.map +1 -1
  45. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.55.0-dev-20251023(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
3
+ * Version: 0.55.0-dev-20251024(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.55.0-dev-20251023(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
3
+ * Version: 0.55.0-dev-20251024(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.55.0-dev-20251023(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
3
+ * Version: 0.55.0-dev-20251024(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.55.0-dev-20251023(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
3
+ * Version: 0.55.0-dev-20251024(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.55.0-dev-20251023(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
3
+ * Version: 0.55.0-dev-20251024(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.55.0-dev-20251023(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
3
+ * Version: 0.55.0-dev-20251024(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.55.0-dev-20251023(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
3
+ * Version: 0.55.0-dev-20251024(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.55.0-dev-20251023(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
3
+ * Version: 0.55.0-dev-20251024(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.55.0-dev-20251023(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
3
+ * Version: 0.55.0-dev-20251024(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.55.0-dev-20251023(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
3
+ * Version: 0.55.0-dev-20251024(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.55.0-dev-20251023(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
3
+ * Version: 0.55.0-dev-20251024(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.55.0-dev-20251023(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
3
+ * Version: 0.55.0-dev-20251024(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.55.0-dev-20251023(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
3
+ * Version: 0.55.0-dev-20251024(e8e70b31548071cc1ffbe4fd2834ceb03c8a82c3)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -46,6 +46,8 @@
46
46
  overflow: hidden;
47
47
  text-overflow: ellipsis;
48
48
  flex: 1;
49
+ display: flex;
50
+ align-items: center;
49
51
  }
50
52
 
51
53
  .monaco-icon-label > .monaco-icon-label-container > .monaco-icon-name-container > .label-name {
@@ -188,7 +188,7 @@ export class TriStateCheckbox extends BaseCheckbox {
188
188
  case true:
189
189
  icon = Codicon.check;
190
190
  break;
191
- case 'partial':
191
+ case 'mixed':
192
192
  icon = Codicon.dash;
193
193
  break;
194
194
  case false:
@@ -227,7 +227,7 @@ export class TriStateCheckbox extends BaseCheckbox {
227
227
  case true:
228
228
  this.checkbox.setIcon(Codicon.check);
229
229
  break;
230
- case 'partial':
230
+ case 'mixed':
231
231
  this.checkbox.setIcon(Codicon.dash);
232
232
  break;
233
233
  case false:
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/browser/ui/toggle/toggle.ts","vs/base/browser/ui/toggle/toggle.ts"],"names":[],"mappings":"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","file":"toggle.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["\nimport { Codicon } from '../../../common/codicons.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { KeyCode } from '../../../common/keyCodes.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport { IKeyboardEvent } from '../../keyboardEvent.js';\nimport { HoverStyle, IHoverLifecycleOptions } from '../hover/hover.js';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\nimport { Widget } from '../widget.js';\nimport './toggle.css';\n\nexport interface IToggleOpts extends IToggleStyles {\n\treadonly actionClassName?: string;\n\treadonly icon?: ThemeIcon;\n\treadonly title: string;\n\treadonly isChecked: boolean;\n\treadonly notFocusable?: boolean;\n\treadonly hoverLifecycleOptions?: IHoverLifecycleOptions;\n}\n\nexport interface IToggleStyles {\n\treadonly inputActiveOptionBorder: string | undefined;\n\treadonly inputActiveOptionForeground: string | undefined;\n\treadonly inputActiveOptionBackground: string | undefined;\n}\n\nexport interface ICheckboxStyles {\n\treadonly checkboxBackground: string | undefined;\n\treadonly checkboxBorder: string | undefined;\n\treadonly checkboxForeground: string | undefined;\n\treadonly checkboxDisabledBackground: string | undefined;\n\treadonly checkboxDisabledForeground: string | undefined;\n\treadonly size?: number;\n\treadonly hoverLifecycleOptions?: IHoverLifecycleOptions;\n}\n\nexport const unthemedToggleStyles = {\n\tinputActiveOptionBorder: '#007ACC00',\n\tinputActiveOptionForeground: '#FFFFFF',\n\tinputActiveOptionBackground: '#0E639C50'\n};\n\nexport class Toggle extends Widget {\n\n\tprivate readonly _onChange = this._register(new Emitter<boolean>());\n\tget onChange(): Event<boolean /* via keyboard */> { return this._onChange.event; }\n\n\tprivate readonly _onKeyDown = this._register(new Emitter<IKeyboardEvent>());\n\tget onKeyDown(): Event<IKeyboardEvent> { return this._onKeyDown.event; }\n\n\tprivate readonly _opts: IToggleOpts;\n\tprivate _title: string;\n\tprivate _icon: ThemeIcon | undefined;\n\treadonly domNode: HTMLElement;\n\n\tprivate _checked: boolean;\n\n\tconstructor(opts: IToggleOpts) {\n\t\tsuper();\n\n\t\tthis._opts = opts;\n\t\tthis._title = this._opts.title;\n\t\tthis._checked = this._opts.isChecked;\n\n\t\tconst classes = ['monaco-custom-toggle'];\n\t\tif (this._opts.icon) {\n\t\t\tthis._icon = this._opts.icon;\n\t\t\tclasses.push(...ThemeIcon.asClassNameArray(this._icon));\n\t\t}\n\t\tif (this._opts.actionClassName) {\n\t\t\tclasses.push(...this._opts.actionClassName.split(' '));\n\t\t}\n\t\tif (this._checked) {\n\t\t\tclasses.push('checked');\n\t\t}\n\n\t\tthis.domNode = document.createElement('div');\n\t\tthis._register(getBaseLayerHoverDelegate().setupDelayedHover(this.domNode, () => ({\n\t\t\tcontent: this._title,\n\t\t\tstyle: HoverStyle.Pointer,\n\t\t}), this._opts.hoverLifecycleOptions));\n\t\tthis.domNode.classList.add(...classes);\n\t\tif (!this._opts.notFocusable) {\n\t\t\tthis.domNode.tabIndex = 0;\n\t\t}\n\t\tthis.domNode.setAttribute('role', 'checkbox');\n\t\tthis.domNode.setAttribute('aria-checked', String(this._checked));\n\n\t\tthis.setTitle(this._opts.title);\n\t\tthis.applyStyles();\n\n\t\tthis.onclick(this.domNode, (ev) => {\n\t\t\tif (this.enabled) {\n\t\t\t\tthis.checked = !this._checked;\n\t\t\t\tthis._onChange.fire(false);\n\t\t\t\tev.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\tthis._register(this.ignoreGesture(this.domNode));\n\n\t\tthis.onkeydown(this.domNode, (keyboardEvent) => {\n\t\t\tif (!this.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (keyboardEvent.keyCode === KeyCode.Space || keyboardEvent.keyCode === KeyCode.Enter) {\n\t\t\t\tthis.checked = !this._checked;\n\t\t\t\tthis._onChange.fire(true);\n\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\tkeyboardEvent.stopPropagation();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._onKeyDown.fire(keyboardEvent);\n\t\t});\n\t}\n\n\tget enabled(): boolean {\n\t\treturn this.domNode.getAttribute('aria-disabled') !== 'true';\n\t}\n\n\tfocus(): void {\n\t\tthis.domNode.focus();\n\t}\n\n\tget checked(): boolean {\n\t\treturn this._checked;\n\t}\n\n\tset checked(newIsChecked: boolean) {\n\t\tthis._checked = newIsChecked;\n\n\t\tthis.domNode.setAttribute('aria-checked', String(this._checked));\n\t\tthis.domNode.classList.toggle('checked', this._checked);\n\n\t\tthis.applyStyles();\n\t}\n\n\tsetIcon(icon: ThemeIcon | undefined): void {\n\t\tif (this._icon) {\n\t\t\tthis.domNode.classList.remove(...ThemeIcon.asClassNameArray(this._icon));\n\t\t}\n\t\tthis._icon = icon;\n\t\tif (this._icon) {\n\t\t\tthis.domNode.classList.add(...ThemeIcon.asClassNameArray(this._icon));\n\t\t}\n\t}\n\n\twidth(): number {\n\t\treturn 2 /*margin left*/ + 2 /*border*/ + 2 /*padding*/ + 16 /* icon width */;\n\t}\n\n\tprotected applyStyles(): void {\n\t\tif (this.domNode) {\n\t\t\tthis.domNode.style.borderColor = (this._checked && this._opts.inputActiveOptionBorder) || '';\n\t\t\tthis.domNode.style.color = (this._checked && this._opts.inputActiveOptionForeground) || 'inherit';\n\t\t\tthis.domNode.style.backgroundColor = (this._checked && this._opts.inputActiveOptionBackground) || '';\n\t\t}\n\t}\n\n\tenable(): void {\n\t\tthis.domNode.setAttribute('aria-disabled', String(false));\n\t\tthis.domNode.classList.remove('disabled');\n\t}\n\n\tdisable(): void {\n\t\tthis.domNode.setAttribute('aria-disabled', String(true));\n\t\tthis.domNode.classList.add('disabled');\n\t}\n\n\tsetTitle(newTitle: string): void {\n\t\tthis._title = newTitle;\n\t\tthis.domNode.setAttribute('aria-label', newTitle);\n\t}\n\n\tset visible(visible: boolean) {\n\t\tthis.domNode.style.display = visible ? '' : 'none';\n\t}\n\n\tget visible() {\n\t\treturn this.domNode.style.display !== 'none';\n\t}\n}\n\n\nabstract class BaseCheckbox extends Widget {\n\tstatic readonly CLASS_NAME = 'monaco-checkbox';\n\n\tprotected readonly _onChange = this._register(new Emitter<boolean>());\n\treadonly onChange: Event<boolean /* via keyboard */> = this._onChange.event;\n\n\tconstructor(\n\t\tprotected readonly checkbox: Toggle,\n\t\treadonly domNode: HTMLElement,\n\t\tprotected readonly styles: ICheckboxStyles\n\t) {\n\t\tsuper();\n\n\t\tthis.applyStyles();\n\t}\n\n\tget enabled(): boolean {\n\t\treturn this.checkbox.enabled;\n\t}\n\n\tenable(): void {\n\t\tthis.checkbox.enable();\n\t\tthis.applyStyles(true);\n\t}\n\n\tdisable(): void {\n\t\tthis.checkbox.disable();\n\t\tthis.applyStyles(false);\n\t}\n\n\tsetTitle(newTitle: string): void {\n\t\tthis.checkbox.setTitle(newTitle);\n\t}\n\n\tprotected applyStyles(enabled = this.enabled): void {\n\t\tthis.domNode.style.color = (enabled ? this.styles.checkboxForeground : this.styles.checkboxDisabledForeground) || '';\n\t\tthis.domNode.style.backgroundColor = (enabled ? this.styles.checkboxBackground : this.styles.checkboxDisabledBackground) || '';\n\t\tthis.domNode.style.borderColor = (enabled ? this.styles.checkboxBorder : this.styles.checkboxDisabledBackground) || '';\n\n\t\tconst size = this.styles.size || 18;\n\t\tthis.domNode.style.width =\n\t\t\tthis.domNode.style.height =\n\t\t\tthis.domNode.style.fontSize = `${size}px`;\n\t\tthis.domNode.style.fontSize = `${size - 2}px`;\n\t}\n}\n\nexport class Checkbox extends BaseCheckbox {\n\tconstructor(title: string, isChecked: boolean, styles: ICheckboxStyles) {\n\t\tconst toggle = new Toggle({ title, isChecked, icon: Codicon.check, actionClassName: BaseCheckbox.CLASS_NAME, hoverLifecycleOptions: styles.hoverLifecycleOptions, ...unthemedToggleStyles });\n\t\tsuper(toggle, toggle.domNode, styles);\n\n\t\tthis._register(toggle);\n\t\tthis._register(this.checkbox.onChange(keyboard => {\n\t\t\tthis.applyStyles();\n\t\t\tthis._onChange.fire(keyboard);\n\t\t}));\n\t}\n\n\tget checked(): boolean {\n\t\treturn this.checkbox.checked;\n\t}\n\n\tset checked(newIsChecked: boolean) {\n\t\tthis.checkbox.checked = newIsChecked;\n\t\tthis.applyStyles();\n\t}\n\n\tprotected override applyStyles(enabled?: boolean): void {\n\t\tif (this.checkbox.checked) {\n\t\t\tthis.checkbox.setIcon(Codicon.check);\n\t\t} else {\n\t\t\tthis.checkbox.setIcon(undefined);\n\t\t}\n\t\tsuper.applyStyles(enabled);\n\t}\n}\n\nexport class TriStateCheckbox extends BaseCheckbox {\n\tconstructor(\n\t\ttitle: string,\n\t\tprivate _state: boolean | 'partial',\n\t\tstyles: ICheckboxStyles\n\t) {\n\t\tlet icon: ThemeIcon | undefined;\n\t\tswitch (_state) {\n\t\t\tcase true:\n\t\t\t\ticon = Codicon.check;\n\t\t\t\tbreak;\n\t\t\tcase 'partial':\n\t\t\t\ticon = Codicon.dash;\n\t\t\t\tbreak;\n\t\t\tcase false:\n\t\t\t\ticon = undefined;\n\t\t\t\tbreak;\n\t\t}\n\t\tconst checkbox = new Toggle({\n\t\t\ttitle,\n\t\t\tisChecked: _state === true,\n\t\t\ticon,\n\t\t\tactionClassName: Checkbox.CLASS_NAME,\n\t\t\thoverLifecycleOptions: styles.hoverLifecycleOptions,\n\t\t\t...unthemedToggleStyles\n\t\t});\n\t\tsuper(\n\t\t\tcheckbox,\n\t\t\tcheckbox.domNode,\n\t\t\tstyles\n\t\t);\n\n\t\tthis._register(checkbox);\n\t\tthis._register(this.checkbox.onChange(keyboard => {\n\t\t\tthis._state = this.checkbox.checked;\n\t\t\tthis.applyStyles();\n\t\t\tthis._onChange.fire(keyboard);\n\t\t}));\n\t}\n\n\tget checked(): boolean | 'partial' {\n\t\treturn this._state;\n\t}\n\n\tset checked(newState: boolean | 'partial') {\n\t\tif (this._state !== newState) {\n\t\t\tthis._state = newState;\n\t\t\tthis.checkbox.checked = newState === true;\n\t\t\tthis.applyStyles();\n\t\t}\n\t}\n\n\tprotected override applyStyles(enabled?: boolean): void {\n\t\tswitch (this._state) {\n\t\t\tcase true:\n\t\t\t\tthis.checkbox.setIcon(Codicon.check);\n\t\t\t\tbreak;\n\t\t\tcase 'partial':\n\t\t\t\tthis.checkbox.setIcon(Codicon.dash);\n\t\t\t\tbreak;\n\t\t\tcase false:\n\t\t\t\tthis.checkbox.setIcon(undefined);\n\t\t\t\tbreak;\n\t\t}\n\t\tsuper.applyStyles(enabled);\n\t}\n}\n","\nimport { Codicon } from '../../../common/codicons.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { KeyCode } from '../../../common/keyCodes.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport { IKeyboardEvent } from '../../keyboardEvent.js';\nimport { HoverStyle, IHoverLifecycleOptions } from '../hover/hover.js';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\nimport { Widget } from '../widget.js';\nimport './toggle.css';\n\nexport interface IToggleOpts extends IToggleStyles {\n\treadonly actionClassName?: string;\n\treadonly icon?: ThemeIcon;\n\treadonly title: string;\n\treadonly isChecked: boolean;\n\treadonly notFocusable?: boolean;\n\treadonly hoverLifecycleOptions?: IHoverLifecycleOptions;\n}\n\nexport interface IToggleStyles {\n\treadonly inputActiveOptionBorder: string | undefined;\n\treadonly inputActiveOptionForeground: string | undefined;\n\treadonly inputActiveOptionBackground: string | undefined;\n}\n\nexport interface ICheckboxStyles {\n\treadonly checkboxBackground: string | undefined;\n\treadonly checkboxBorder: string | undefined;\n\treadonly checkboxForeground: string | undefined;\n\treadonly checkboxDisabledBackground: string | undefined;\n\treadonly checkboxDisabledForeground: string | undefined;\n\treadonly size?: number;\n\treadonly hoverLifecycleOptions?: IHoverLifecycleOptions;\n}\n\nexport const unthemedToggleStyles = {\n\tinputActiveOptionBorder: '#007ACC00',\n\tinputActiveOptionForeground: '#FFFFFF',\n\tinputActiveOptionBackground: '#0E639C50'\n};\n\nexport class Toggle extends Widget {\n\n\tprivate readonly _onChange = this._register(new Emitter<boolean>());\n\tget onChange(): Event<boolean /* via keyboard */> { return this._onChange.event; }\n\n\tprivate readonly _onKeyDown = this._register(new Emitter<IKeyboardEvent>());\n\tget onKeyDown(): Event<IKeyboardEvent> { return this._onKeyDown.event; }\n\n\tprivate readonly _opts: IToggleOpts;\n\tprivate _title: string;\n\tprivate _icon: ThemeIcon | undefined;\n\treadonly domNode: HTMLElement;\n\n\tprivate _checked: boolean;\n\n\tconstructor(opts: IToggleOpts) {\n\t\tsuper();\n\n\t\tthis._opts = opts;\n\t\tthis._title = this._opts.title;\n\t\tthis._checked = this._opts.isChecked;\n\n\t\tconst classes = ['monaco-custom-toggle'];\n\t\tif (this._opts.icon) {\n\t\t\tthis._icon = this._opts.icon;\n\t\t\tclasses.push(...ThemeIcon.asClassNameArray(this._icon));\n\t\t}\n\t\tif (this._opts.actionClassName) {\n\t\t\tclasses.push(...this._opts.actionClassName.split(' '));\n\t\t}\n\t\tif (this._checked) {\n\t\t\tclasses.push('checked');\n\t\t}\n\n\t\tthis.domNode = document.createElement('div');\n\t\tthis._register(getBaseLayerHoverDelegate().setupDelayedHover(this.domNode, () => ({\n\t\t\tcontent: this._title,\n\t\t\tstyle: HoverStyle.Pointer,\n\t\t}), this._opts.hoverLifecycleOptions));\n\t\tthis.domNode.classList.add(...classes);\n\t\tif (!this._opts.notFocusable) {\n\t\t\tthis.domNode.tabIndex = 0;\n\t\t}\n\t\tthis.domNode.setAttribute('role', 'checkbox');\n\t\tthis.domNode.setAttribute('aria-checked', String(this._checked));\n\n\t\tthis.setTitle(this._opts.title);\n\t\tthis.applyStyles();\n\n\t\tthis.onclick(this.domNode, (ev) => {\n\t\t\tif (this.enabled) {\n\t\t\t\tthis.checked = !this._checked;\n\t\t\t\tthis._onChange.fire(false);\n\t\t\t\tev.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\tthis._register(this.ignoreGesture(this.domNode));\n\n\t\tthis.onkeydown(this.domNode, (keyboardEvent) => {\n\t\t\tif (!this.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (keyboardEvent.keyCode === KeyCode.Space || keyboardEvent.keyCode === KeyCode.Enter) {\n\t\t\t\tthis.checked = !this._checked;\n\t\t\t\tthis._onChange.fire(true);\n\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\tkeyboardEvent.stopPropagation();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._onKeyDown.fire(keyboardEvent);\n\t\t});\n\t}\n\n\tget enabled(): boolean {\n\t\treturn this.domNode.getAttribute('aria-disabled') !== 'true';\n\t}\n\n\tfocus(): void {\n\t\tthis.domNode.focus();\n\t}\n\n\tget checked(): boolean {\n\t\treturn this._checked;\n\t}\n\n\tset checked(newIsChecked: boolean) {\n\t\tthis._checked = newIsChecked;\n\n\t\tthis.domNode.setAttribute('aria-checked', String(this._checked));\n\t\tthis.domNode.classList.toggle('checked', this._checked);\n\n\t\tthis.applyStyles();\n\t}\n\n\tsetIcon(icon: ThemeIcon | undefined): void {\n\t\tif (this._icon) {\n\t\t\tthis.domNode.classList.remove(...ThemeIcon.asClassNameArray(this._icon));\n\t\t}\n\t\tthis._icon = icon;\n\t\tif (this._icon) {\n\t\t\tthis.domNode.classList.add(...ThemeIcon.asClassNameArray(this._icon));\n\t\t}\n\t}\n\n\twidth(): number {\n\t\treturn 2 /*margin left*/ + 2 /*border*/ + 2 /*padding*/ + 16 /* icon width */;\n\t}\n\n\tprotected applyStyles(): void {\n\t\tif (this.domNode) {\n\t\t\tthis.domNode.style.borderColor = (this._checked && this._opts.inputActiveOptionBorder) || '';\n\t\t\tthis.domNode.style.color = (this._checked && this._opts.inputActiveOptionForeground) || 'inherit';\n\t\t\tthis.domNode.style.backgroundColor = (this._checked && this._opts.inputActiveOptionBackground) || '';\n\t\t}\n\t}\n\n\tenable(): void {\n\t\tthis.domNode.setAttribute('aria-disabled', String(false));\n\t\tthis.domNode.classList.remove('disabled');\n\t}\n\n\tdisable(): void {\n\t\tthis.domNode.setAttribute('aria-disabled', String(true));\n\t\tthis.domNode.classList.add('disabled');\n\t}\n\n\tsetTitle(newTitle: string): void {\n\t\tthis._title = newTitle;\n\t\tthis.domNode.setAttribute('aria-label', newTitle);\n\t}\n\n\tset visible(visible: boolean) {\n\t\tthis.domNode.style.display = visible ? '' : 'none';\n\t}\n\n\tget visible() {\n\t\treturn this.domNode.style.display !== 'none';\n\t}\n}\n\n\nabstract class BaseCheckbox extends Widget {\n\tstatic readonly CLASS_NAME = 'monaco-checkbox';\n\n\tprotected readonly _onChange = this._register(new Emitter<boolean>());\n\treadonly onChange: Event<boolean /* via keyboard */> = this._onChange.event;\n\n\tconstructor(\n\t\tprotected readonly checkbox: Toggle,\n\t\treadonly domNode: HTMLElement,\n\t\tprotected readonly styles: ICheckboxStyles\n\t) {\n\t\tsuper();\n\n\t\tthis.applyStyles();\n\t}\n\n\tget enabled(): boolean {\n\t\treturn this.checkbox.enabled;\n\t}\n\n\tenable(): void {\n\t\tthis.checkbox.enable();\n\t\tthis.applyStyles(true);\n\t}\n\n\tdisable(): void {\n\t\tthis.checkbox.disable();\n\t\tthis.applyStyles(false);\n\t}\n\n\tsetTitle(newTitle: string): void {\n\t\tthis.checkbox.setTitle(newTitle);\n\t}\n\n\tprotected applyStyles(enabled = this.enabled): void {\n\t\tthis.domNode.style.color = (enabled ? this.styles.checkboxForeground : this.styles.checkboxDisabledForeground) || '';\n\t\tthis.domNode.style.backgroundColor = (enabled ? this.styles.checkboxBackground : this.styles.checkboxDisabledBackground) || '';\n\t\tthis.domNode.style.borderColor = (enabled ? this.styles.checkboxBorder : this.styles.checkboxDisabledBackground) || '';\n\n\t\tconst size = this.styles.size || 18;\n\t\tthis.domNode.style.width =\n\t\t\tthis.domNode.style.height =\n\t\t\tthis.domNode.style.fontSize = `${size}px`;\n\t\tthis.domNode.style.fontSize = `${size - 2}px`;\n\t}\n}\n\nexport class Checkbox extends BaseCheckbox {\n\tconstructor(title: string, isChecked: boolean, styles: ICheckboxStyles) {\n\t\tconst toggle = new Toggle({ title, isChecked, icon: Codicon.check, actionClassName: BaseCheckbox.CLASS_NAME, hoverLifecycleOptions: styles.hoverLifecycleOptions, ...unthemedToggleStyles });\n\t\tsuper(toggle, toggle.domNode, styles);\n\n\t\tthis._register(toggle);\n\t\tthis._register(this.checkbox.onChange(keyboard => {\n\t\t\tthis.applyStyles();\n\t\t\tthis._onChange.fire(keyboard);\n\t\t}));\n\t}\n\n\tget checked(): boolean {\n\t\treturn this.checkbox.checked;\n\t}\n\n\tset checked(newIsChecked: boolean) {\n\t\tthis.checkbox.checked = newIsChecked;\n\t\tthis.applyStyles();\n\t}\n\n\tprotected override applyStyles(enabled?: boolean): void {\n\t\tif (this.checkbox.checked) {\n\t\t\tthis.checkbox.setIcon(Codicon.check);\n\t\t} else {\n\t\t\tthis.checkbox.setIcon(undefined);\n\t\t}\n\t\tsuper.applyStyles(enabled);\n\t}\n}\n\nexport class TriStateCheckbox extends BaseCheckbox {\n\tconstructor(\n\t\ttitle: string,\n\t\tprivate _state: boolean | 'partial',\n\t\tstyles: ICheckboxStyles\n\t) {\n\t\tlet icon: ThemeIcon | undefined;\n\t\tswitch (_state) {\n\t\t\tcase true:\n\t\t\t\ticon = Codicon.check;\n\t\t\t\tbreak;\n\t\t\tcase 'partial':\n\t\t\t\ticon = Codicon.dash;\n\t\t\t\tbreak;\n\t\t\tcase false:\n\t\t\t\ticon = undefined;\n\t\t\t\tbreak;\n\t\t}\n\t\tconst checkbox = new Toggle({\n\t\t\ttitle,\n\t\t\tisChecked: _state === true,\n\t\t\ticon,\n\t\t\tactionClassName: Checkbox.CLASS_NAME,\n\t\t\thoverLifecycleOptions: styles.hoverLifecycleOptions,\n\t\t\t...unthemedToggleStyles\n\t\t});\n\t\tsuper(\n\t\t\tcheckbox,\n\t\t\tcheckbox.domNode,\n\t\t\tstyles\n\t\t);\n\n\t\tthis._register(checkbox);\n\t\tthis._register(this.checkbox.onChange(keyboard => {\n\t\t\tthis._state = this.checkbox.checked;\n\t\t\tthis.applyStyles();\n\t\t\tthis._onChange.fire(keyboard);\n\t\t}));\n\t}\n\n\tget checked(): boolean | 'partial' {\n\t\treturn this._state;\n\t}\n\n\tset checked(newState: boolean | 'partial') {\n\t\tif (this._state !== newState) {\n\t\t\tthis._state = newState;\n\t\t\tthis.checkbox.checked = newState === true;\n\t\t\tthis.applyStyles();\n\t\t}\n\t}\n\n\tprotected override applyStyles(enabled?: boolean): void {\n\t\tswitch (this._state) {\n\t\t\tcase true:\n\t\t\t\tthis.checkbox.setIcon(Codicon.check);\n\t\t\t\tbreak;\n\t\t\tcase 'partial':\n\t\t\t\tthis.checkbox.setIcon(Codicon.dash);\n\t\t\t\tbreak;\n\t\t\tcase false:\n\t\t\t\tthis.checkbox.setIcon(undefined);\n\t\t\t\tbreak;\n\t\t}\n\t\tsuper.applyStyles(enabled);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/browser/ui/toggle/toggle.ts","vs/base/browser/ui/toggle/toggle.ts"],"names":[],"mappings":"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","file":"toggle.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["\nimport { Codicon } from '../../../common/codicons.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { KeyCode } from '../../../common/keyCodes.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport { IKeyboardEvent } from '../../keyboardEvent.js';\nimport { HoverStyle, IHoverLifecycleOptions } from '../hover/hover.js';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\nimport { Widget } from '../widget.js';\nimport './toggle.css';\n\nexport interface IToggleOpts extends IToggleStyles {\n\treadonly actionClassName?: string;\n\treadonly icon?: ThemeIcon;\n\treadonly title: string;\n\treadonly isChecked: boolean;\n\treadonly notFocusable?: boolean;\n\treadonly hoverLifecycleOptions?: IHoverLifecycleOptions;\n}\n\nexport interface IToggleStyles {\n\treadonly inputActiveOptionBorder: string | undefined;\n\treadonly inputActiveOptionForeground: string | undefined;\n\treadonly inputActiveOptionBackground: string | undefined;\n}\n\nexport interface ICheckboxStyles {\n\treadonly checkboxBackground: string | undefined;\n\treadonly checkboxBorder: string | undefined;\n\treadonly checkboxForeground: string | undefined;\n\treadonly checkboxDisabledBackground: string | undefined;\n\treadonly checkboxDisabledForeground: string | undefined;\n\treadonly size?: number;\n\treadonly hoverLifecycleOptions?: IHoverLifecycleOptions;\n}\n\nexport const unthemedToggleStyles = {\n\tinputActiveOptionBorder: '#007ACC00',\n\tinputActiveOptionForeground: '#FFFFFF',\n\tinputActiveOptionBackground: '#0E639C50'\n};\n\nexport class Toggle extends Widget {\n\n\tprivate readonly _onChange = this._register(new Emitter<boolean>());\n\tget onChange(): Event<boolean /* via keyboard */> { return this._onChange.event; }\n\n\tprivate readonly _onKeyDown = this._register(new Emitter<IKeyboardEvent>());\n\tget onKeyDown(): Event<IKeyboardEvent> { return this._onKeyDown.event; }\n\n\tprivate readonly _opts: IToggleOpts;\n\tprivate _title: string;\n\tprivate _icon: ThemeIcon | undefined;\n\treadonly domNode: HTMLElement;\n\n\tprivate _checked: boolean;\n\n\tconstructor(opts: IToggleOpts) {\n\t\tsuper();\n\n\t\tthis._opts = opts;\n\t\tthis._title = this._opts.title;\n\t\tthis._checked = this._opts.isChecked;\n\n\t\tconst classes = ['monaco-custom-toggle'];\n\t\tif (this._opts.icon) {\n\t\t\tthis._icon = this._opts.icon;\n\t\t\tclasses.push(...ThemeIcon.asClassNameArray(this._icon));\n\t\t}\n\t\tif (this._opts.actionClassName) {\n\t\t\tclasses.push(...this._opts.actionClassName.split(' '));\n\t\t}\n\t\tif (this._checked) {\n\t\t\tclasses.push('checked');\n\t\t}\n\n\t\tthis.domNode = document.createElement('div');\n\t\tthis._register(getBaseLayerHoverDelegate().setupDelayedHover(this.domNode, () => ({\n\t\t\tcontent: this._title,\n\t\t\tstyle: HoverStyle.Pointer,\n\t\t}), this._opts.hoverLifecycleOptions));\n\t\tthis.domNode.classList.add(...classes);\n\t\tif (!this._opts.notFocusable) {\n\t\t\tthis.domNode.tabIndex = 0;\n\t\t}\n\t\tthis.domNode.setAttribute('role', 'checkbox');\n\t\tthis.domNode.setAttribute('aria-checked', String(this._checked));\n\n\t\tthis.setTitle(this._opts.title);\n\t\tthis.applyStyles();\n\n\t\tthis.onclick(this.domNode, (ev) => {\n\t\t\tif (this.enabled) {\n\t\t\t\tthis.checked = !this._checked;\n\t\t\t\tthis._onChange.fire(false);\n\t\t\t\tev.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\tthis._register(this.ignoreGesture(this.domNode));\n\n\t\tthis.onkeydown(this.domNode, (keyboardEvent) => {\n\t\t\tif (!this.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (keyboardEvent.keyCode === KeyCode.Space || keyboardEvent.keyCode === KeyCode.Enter) {\n\t\t\t\tthis.checked = !this._checked;\n\t\t\t\tthis._onChange.fire(true);\n\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\tkeyboardEvent.stopPropagation();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._onKeyDown.fire(keyboardEvent);\n\t\t});\n\t}\n\n\tget enabled(): boolean {\n\t\treturn this.domNode.getAttribute('aria-disabled') !== 'true';\n\t}\n\n\tfocus(): void {\n\t\tthis.domNode.focus();\n\t}\n\n\tget checked(): boolean {\n\t\treturn this._checked;\n\t}\n\n\tset checked(newIsChecked: boolean) {\n\t\tthis._checked = newIsChecked;\n\n\t\tthis.domNode.setAttribute('aria-checked', String(this._checked));\n\t\tthis.domNode.classList.toggle('checked', this._checked);\n\n\t\tthis.applyStyles();\n\t}\n\n\tsetIcon(icon: ThemeIcon | undefined): void {\n\t\tif (this._icon) {\n\t\t\tthis.domNode.classList.remove(...ThemeIcon.asClassNameArray(this._icon));\n\t\t}\n\t\tthis._icon = icon;\n\t\tif (this._icon) {\n\t\t\tthis.domNode.classList.add(...ThemeIcon.asClassNameArray(this._icon));\n\t\t}\n\t}\n\n\twidth(): number {\n\t\treturn 2 /*margin left*/ + 2 /*border*/ + 2 /*padding*/ + 16 /* icon width */;\n\t}\n\n\tprotected applyStyles(): void {\n\t\tif (this.domNode) {\n\t\t\tthis.domNode.style.borderColor = (this._checked && this._opts.inputActiveOptionBorder) || '';\n\t\t\tthis.domNode.style.color = (this._checked && this._opts.inputActiveOptionForeground) || 'inherit';\n\t\t\tthis.domNode.style.backgroundColor = (this._checked && this._opts.inputActiveOptionBackground) || '';\n\t\t}\n\t}\n\n\tenable(): void {\n\t\tthis.domNode.setAttribute('aria-disabled', String(false));\n\t\tthis.domNode.classList.remove('disabled');\n\t}\n\n\tdisable(): void {\n\t\tthis.domNode.setAttribute('aria-disabled', String(true));\n\t\tthis.domNode.classList.add('disabled');\n\t}\n\n\tsetTitle(newTitle: string): void {\n\t\tthis._title = newTitle;\n\t\tthis.domNode.setAttribute('aria-label', newTitle);\n\t}\n\n\tset visible(visible: boolean) {\n\t\tthis.domNode.style.display = visible ? '' : 'none';\n\t}\n\n\tget visible() {\n\t\treturn this.domNode.style.display !== 'none';\n\t}\n}\n\n\nabstract class BaseCheckbox extends Widget {\n\tstatic readonly CLASS_NAME = 'monaco-checkbox';\n\n\tprotected readonly _onChange = this._register(new Emitter<boolean>());\n\treadonly onChange: Event<boolean /* via keyboard */> = this._onChange.event;\n\n\tconstructor(\n\t\tprotected readonly checkbox: Toggle,\n\t\treadonly domNode: HTMLElement,\n\t\tprotected readonly styles: ICheckboxStyles\n\t) {\n\t\tsuper();\n\n\t\tthis.applyStyles();\n\t}\n\n\tget enabled(): boolean {\n\t\treturn this.checkbox.enabled;\n\t}\n\n\tenable(): void {\n\t\tthis.checkbox.enable();\n\t\tthis.applyStyles(true);\n\t}\n\n\tdisable(): void {\n\t\tthis.checkbox.disable();\n\t\tthis.applyStyles(false);\n\t}\n\n\tsetTitle(newTitle: string): void {\n\t\tthis.checkbox.setTitle(newTitle);\n\t}\n\n\tprotected applyStyles(enabled = this.enabled): void {\n\t\tthis.domNode.style.color = (enabled ? this.styles.checkboxForeground : this.styles.checkboxDisabledForeground) || '';\n\t\tthis.domNode.style.backgroundColor = (enabled ? this.styles.checkboxBackground : this.styles.checkboxDisabledBackground) || '';\n\t\tthis.domNode.style.borderColor = (enabled ? this.styles.checkboxBorder : this.styles.checkboxDisabledBackground) || '';\n\n\t\tconst size = this.styles.size || 18;\n\t\tthis.domNode.style.width =\n\t\t\tthis.domNode.style.height =\n\t\t\tthis.domNode.style.fontSize = `${size}px`;\n\t\tthis.domNode.style.fontSize = `${size - 2}px`;\n\t}\n}\n\nexport class Checkbox extends BaseCheckbox {\n\tconstructor(title: string, isChecked: boolean, styles: ICheckboxStyles) {\n\t\tconst toggle = new Toggle({ title, isChecked, icon: Codicon.check, actionClassName: BaseCheckbox.CLASS_NAME, hoverLifecycleOptions: styles.hoverLifecycleOptions, ...unthemedToggleStyles });\n\t\tsuper(toggle, toggle.domNode, styles);\n\n\t\tthis._register(toggle);\n\t\tthis._register(this.checkbox.onChange(keyboard => {\n\t\t\tthis.applyStyles();\n\t\t\tthis._onChange.fire(keyboard);\n\t\t}));\n\t}\n\n\tget checked(): boolean {\n\t\treturn this.checkbox.checked;\n\t}\n\n\tset checked(newIsChecked: boolean) {\n\t\tthis.checkbox.checked = newIsChecked;\n\t\tthis.applyStyles();\n\t}\n\n\tprotected override applyStyles(enabled?: boolean): void {\n\t\tif (this.checkbox.checked) {\n\t\t\tthis.checkbox.setIcon(Codicon.check);\n\t\t} else {\n\t\t\tthis.checkbox.setIcon(undefined);\n\t\t}\n\t\tsuper.applyStyles(enabled);\n\t}\n}\n\nexport class TriStateCheckbox extends BaseCheckbox {\n\tconstructor(\n\t\ttitle: string,\n\t\tprivate _state: boolean | 'mixed',\n\t\tstyles: ICheckboxStyles\n\t) {\n\t\tlet icon: ThemeIcon | undefined;\n\t\tswitch (_state) {\n\t\t\tcase true:\n\t\t\t\ticon = Codicon.check;\n\t\t\t\tbreak;\n\t\t\tcase 'mixed':\n\t\t\t\ticon = Codicon.dash;\n\t\t\t\tbreak;\n\t\t\tcase false:\n\t\t\t\ticon = undefined;\n\t\t\t\tbreak;\n\t\t}\n\t\tconst checkbox = new Toggle({\n\t\t\ttitle,\n\t\t\tisChecked: _state === true,\n\t\t\ticon,\n\t\t\tactionClassName: Checkbox.CLASS_NAME,\n\t\t\thoverLifecycleOptions: styles.hoverLifecycleOptions,\n\t\t\t...unthemedToggleStyles\n\t\t});\n\t\tsuper(\n\t\t\tcheckbox,\n\t\t\tcheckbox.domNode,\n\t\t\tstyles\n\t\t);\n\n\t\tthis._register(checkbox);\n\t\tthis._register(this.checkbox.onChange(keyboard => {\n\t\t\tthis._state = this.checkbox.checked;\n\t\t\tthis.applyStyles();\n\t\t\tthis._onChange.fire(keyboard);\n\t\t}));\n\t}\n\n\tget checked(): boolean | 'mixed' {\n\t\treturn this._state;\n\t}\n\n\tset checked(newState: boolean | 'mixed') {\n\t\tif (this._state !== newState) {\n\t\t\tthis._state = newState;\n\t\t\tthis.checkbox.checked = newState === true;\n\t\t\tthis.applyStyles();\n\t\t}\n\t}\n\n\tprotected override applyStyles(enabled?: boolean): void {\n\t\tswitch (this._state) {\n\t\t\tcase true:\n\t\t\t\tthis.checkbox.setIcon(Codicon.check);\n\t\t\t\tbreak;\n\t\t\tcase 'mixed':\n\t\t\t\tthis.checkbox.setIcon(Codicon.dash);\n\t\t\t\tbreak;\n\t\t\tcase false:\n\t\t\t\tthis.checkbox.setIcon(undefined);\n\t\t\t\tbreak;\n\t\t}\n\t\tsuper.applyStyles(enabled);\n\t}\n}\n","\nimport { Codicon } from '../../../common/codicons.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { KeyCode } from '../../../common/keyCodes.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport { IKeyboardEvent } from '../../keyboardEvent.js';\nimport { HoverStyle, IHoverLifecycleOptions } from '../hover/hover.js';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\nimport { Widget } from '../widget.js';\nimport './toggle.css';\n\nexport interface IToggleOpts extends IToggleStyles {\n\treadonly actionClassName?: string;\n\treadonly icon?: ThemeIcon;\n\treadonly title: string;\n\treadonly isChecked: boolean;\n\treadonly notFocusable?: boolean;\n\treadonly hoverLifecycleOptions?: IHoverLifecycleOptions;\n}\n\nexport interface IToggleStyles {\n\treadonly inputActiveOptionBorder: string | undefined;\n\treadonly inputActiveOptionForeground: string | undefined;\n\treadonly inputActiveOptionBackground: string | undefined;\n}\n\nexport interface ICheckboxStyles {\n\treadonly checkboxBackground: string | undefined;\n\treadonly checkboxBorder: string | undefined;\n\treadonly checkboxForeground: string | undefined;\n\treadonly checkboxDisabledBackground: string | undefined;\n\treadonly checkboxDisabledForeground: string | undefined;\n\treadonly size?: number;\n\treadonly hoverLifecycleOptions?: IHoverLifecycleOptions;\n}\n\nexport const unthemedToggleStyles = {\n\tinputActiveOptionBorder: '#007ACC00',\n\tinputActiveOptionForeground: '#FFFFFF',\n\tinputActiveOptionBackground: '#0E639C50'\n};\n\nexport class Toggle extends Widget {\n\n\tprivate readonly _onChange = this._register(new Emitter<boolean>());\n\tget onChange(): Event<boolean /* via keyboard */> { return this._onChange.event; }\n\n\tprivate readonly _onKeyDown = this._register(new Emitter<IKeyboardEvent>());\n\tget onKeyDown(): Event<IKeyboardEvent> { return this._onKeyDown.event; }\n\n\tprivate readonly _opts: IToggleOpts;\n\tprivate _title: string;\n\tprivate _icon: ThemeIcon | undefined;\n\treadonly domNode: HTMLElement;\n\n\tprivate _checked: boolean;\n\n\tconstructor(opts: IToggleOpts) {\n\t\tsuper();\n\n\t\tthis._opts = opts;\n\t\tthis._title = this._opts.title;\n\t\tthis._checked = this._opts.isChecked;\n\n\t\tconst classes = ['monaco-custom-toggle'];\n\t\tif (this._opts.icon) {\n\t\t\tthis._icon = this._opts.icon;\n\t\t\tclasses.push(...ThemeIcon.asClassNameArray(this._icon));\n\t\t}\n\t\tif (this._opts.actionClassName) {\n\t\t\tclasses.push(...this._opts.actionClassName.split(' '));\n\t\t}\n\t\tif (this._checked) {\n\t\t\tclasses.push('checked');\n\t\t}\n\n\t\tthis.domNode = document.createElement('div');\n\t\tthis._register(getBaseLayerHoverDelegate().setupDelayedHover(this.domNode, () => ({\n\t\t\tcontent: this._title,\n\t\t\tstyle: HoverStyle.Pointer,\n\t\t}), this._opts.hoverLifecycleOptions));\n\t\tthis.domNode.classList.add(...classes);\n\t\tif (!this._opts.notFocusable) {\n\t\t\tthis.domNode.tabIndex = 0;\n\t\t}\n\t\tthis.domNode.setAttribute('role', 'checkbox');\n\t\tthis.domNode.setAttribute('aria-checked', String(this._checked));\n\n\t\tthis.setTitle(this._opts.title);\n\t\tthis.applyStyles();\n\n\t\tthis.onclick(this.domNode, (ev) => {\n\t\t\tif (this.enabled) {\n\t\t\t\tthis.checked = !this._checked;\n\t\t\t\tthis._onChange.fire(false);\n\t\t\t\tev.preventDefault();\n\t\t\t}\n\t\t});\n\n\t\tthis._register(this.ignoreGesture(this.domNode));\n\n\t\tthis.onkeydown(this.domNode, (keyboardEvent) => {\n\t\t\tif (!this.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (keyboardEvent.keyCode === KeyCode.Space || keyboardEvent.keyCode === KeyCode.Enter) {\n\t\t\t\tthis.checked = !this._checked;\n\t\t\t\tthis._onChange.fire(true);\n\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\tkeyboardEvent.stopPropagation();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._onKeyDown.fire(keyboardEvent);\n\t\t});\n\t}\n\n\tget enabled(): boolean {\n\t\treturn this.domNode.getAttribute('aria-disabled') !== 'true';\n\t}\n\n\tfocus(): void {\n\t\tthis.domNode.focus();\n\t}\n\n\tget checked(): boolean {\n\t\treturn this._checked;\n\t}\n\n\tset checked(newIsChecked: boolean) {\n\t\tthis._checked = newIsChecked;\n\n\t\tthis.domNode.setAttribute('aria-checked', String(this._checked));\n\t\tthis.domNode.classList.toggle('checked', this._checked);\n\n\t\tthis.applyStyles();\n\t}\n\n\tsetIcon(icon: ThemeIcon | undefined): void {\n\t\tif (this._icon) {\n\t\t\tthis.domNode.classList.remove(...ThemeIcon.asClassNameArray(this._icon));\n\t\t}\n\t\tthis._icon = icon;\n\t\tif (this._icon) {\n\t\t\tthis.domNode.classList.add(...ThemeIcon.asClassNameArray(this._icon));\n\t\t}\n\t}\n\n\twidth(): number {\n\t\treturn 2 /*margin left*/ + 2 /*border*/ + 2 /*padding*/ + 16 /* icon width */;\n\t}\n\n\tprotected applyStyles(): void {\n\t\tif (this.domNode) {\n\t\t\tthis.domNode.style.borderColor = (this._checked && this._opts.inputActiveOptionBorder) || '';\n\t\t\tthis.domNode.style.color = (this._checked && this._opts.inputActiveOptionForeground) || 'inherit';\n\t\t\tthis.domNode.style.backgroundColor = (this._checked && this._opts.inputActiveOptionBackground) || '';\n\t\t}\n\t}\n\n\tenable(): void {\n\t\tthis.domNode.setAttribute('aria-disabled', String(false));\n\t\tthis.domNode.classList.remove('disabled');\n\t}\n\n\tdisable(): void {\n\t\tthis.domNode.setAttribute('aria-disabled', String(true));\n\t\tthis.domNode.classList.add('disabled');\n\t}\n\n\tsetTitle(newTitle: string): void {\n\t\tthis._title = newTitle;\n\t\tthis.domNode.setAttribute('aria-label', newTitle);\n\t}\n\n\tset visible(visible: boolean) {\n\t\tthis.domNode.style.display = visible ? '' : 'none';\n\t}\n\n\tget visible() {\n\t\treturn this.domNode.style.display !== 'none';\n\t}\n}\n\n\nabstract class BaseCheckbox extends Widget {\n\tstatic readonly CLASS_NAME = 'monaco-checkbox';\n\n\tprotected readonly _onChange = this._register(new Emitter<boolean>());\n\treadonly onChange: Event<boolean /* via keyboard */> = this._onChange.event;\n\n\tconstructor(\n\t\tprotected readonly checkbox: Toggle,\n\t\treadonly domNode: HTMLElement,\n\t\tprotected readonly styles: ICheckboxStyles\n\t) {\n\t\tsuper();\n\n\t\tthis.applyStyles();\n\t}\n\n\tget enabled(): boolean {\n\t\treturn this.checkbox.enabled;\n\t}\n\n\tenable(): void {\n\t\tthis.checkbox.enable();\n\t\tthis.applyStyles(true);\n\t}\n\n\tdisable(): void {\n\t\tthis.checkbox.disable();\n\t\tthis.applyStyles(false);\n\t}\n\n\tsetTitle(newTitle: string): void {\n\t\tthis.checkbox.setTitle(newTitle);\n\t}\n\n\tprotected applyStyles(enabled = this.enabled): void {\n\t\tthis.domNode.style.color = (enabled ? this.styles.checkboxForeground : this.styles.checkboxDisabledForeground) || '';\n\t\tthis.domNode.style.backgroundColor = (enabled ? this.styles.checkboxBackground : this.styles.checkboxDisabledBackground) || '';\n\t\tthis.domNode.style.borderColor = (enabled ? this.styles.checkboxBorder : this.styles.checkboxDisabledBackground) || '';\n\n\t\tconst size = this.styles.size || 18;\n\t\tthis.domNode.style.width =\n\t\t\tthis.domNode.style.height =\n\t\t\tthis.domNode.style.fontSize = `${size}px`;\n\t\tthis.domNode.style.fontSize = `${size - 2}px`;\n\t}\n}\n\nexport class Checkbox extends BaseCheckbox {\n\tconstructor(title: string, isChecked: boolean, styles: ICheckboxStyles) {\n\t\tconst toggle = new Toggle({ title, isChecked, icon: Codicon.check, actionClassName: BaseCheckbox.CLASS_NAME, hoverLifecycleOptions: styles.hoverLifecycleOptions, ...unthemedToggleStyles });\n\t\tsuper(toggle, toggle.domNode, styles);\n\n\t\tthis._register(toggle);\n\t\tthis._register(this.checkbox.onChange(keyboard => {\n\t\t\tthis.applyStyles();\n\t\t\tthis._onChange.fire(keyboard);\n\t\t}));\n\t}\n\n\tget checked(): boolean {\n\t\treturn this.checkbox.checked;\n\t}\n\n\tset checked(newIsChecked: boolean) {\n\t\tthis.checkbox.checked = newIsChecked;\n\t\tthis.applyStyles();\n\t}\n\n\tprotected override applyStyles(enabled?: boolean): void {\n\t\tif (this.checkbox.checked) {\n\t\t\tthis.checkbox.setIcon(Codicon.check);\n\t\t} else {\n\t\t\tthis.checkbox.setIcon(undefined);\n\t\t}\n\t\tsuper.applyStyles(enabled);\n\t}\n}\n\nexport class TriStateCheckbox extends BaseCheckbox {\n\tconstructor(\n\t\ttitle: string,\n\t\tprivate _state: boolean | 'mixed',\n\t\tstyles: ICheckboxStyles\n\t) {\n\t\tlet icon: ThemeIcon | undefined;\n\t\tswitch (_state) {\n\t\t\tcase true:\n\t\t\t\ticon = Codicon.check;\n\t\t\t\tbreak;\n\t\t\tcase 'mixed':\n\t\t\t\ticon = Codicon.dash;\n\t\t\t\tbreak;\n\t\t\tcase false:\n\t\t\t\ticon = undefined;\n\t\t\t\tbreak;\n\t\t}\n\t\tconst checkbox = new Toggle({\n\t\t\ttitle,\n\t\t\tisChecked: _state === true,\n\t\t\ticon,\n\t\t\tactionClassName: Checkbox.CLASS_NAME,\n\t\t\thoverLifecycleOptions: styles.hoverLifecycleOptions,\n\t\t\t...unthemedToggleStyles\n\t\t});\n\t\tsuper(\n\t\t\tcheckbox,\n\t\t\tcheckbox.domNode,\n\t\t\tstyles\n\t\t);\n\n\t\tthis._register(checkbox);\n\t\tthis._register(this.checkbox.onChange(keyboard => {\n\t\t\tthis._state = this.checkbox.checked;\n\t\t\tthis.applyStyles();\n\t\t\tthis._onChange.fire(keyboard);\n\t\t}));\n\t}\n\n\tget checked(): boolean | 'mixed' {\n\t\treturn this._state;\n\t}\n\n\tset checked(newState: boolean | 'mixed') {\n\t\tif (this._state !== newState) {\n\t\t\tthis._state = newState;\n\t\t\tthis.checkbox.checked = newState === true;\n\t\t\tthis.applyStyles();\n\t\t}\n\t}\n\n\tprotected override applyStyles(enabled?: boolean): void {\n\t\tswitch (this._state) {\n\t\t\tcase true:\n\t\t\t\tthis.checkbox.setIcon(Codicon.check);\n\t\t\t\tbreak;\n\t\t\tcase 'mixed':\n\t\t\t\tthis.checkbox.setIcon(Codicon.dash);\n\t\t\t\tbreak;\n\t\t\tcase false:\n\t\t\t\tthis.checkbox.setIcon(undefined);\n\t\t\t\tbreak;\n\t\t}\n\t\tsuper.applyStyles(enabled);\n\t}\n}\n"]}
@@ -232,6 +232,10 @@ export class CompressedObjectTreeModel {
232
232
  refilter() {
233
233
  this.model.refilter();
234
234
  }
235
+ resort(location = null, recursive = true) {
236
+ const compressedNode = this.getCompressedNode(location);
237
+ this.model.resort(compressedNode, recursive);
238
+ }
235
239
  getCompressedNode(element) {
236
240
  if (element === null) {
237
241
  return null;
@@ -369,6 +373,9 @@ export class CompressibleObjectTreeModel {
369
373
  refilter() {
370
374
  return this.model.refilter();
371
375
  }
376
+ resort(element = null, recursive = true) {
377
+ return this.model.resort(element, recursive);
378
+ }
372
379
  getCompressedTreeNode(location = null) {
373
380
  return this.model.getNode(location);
374
381
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/browser/ui/tree/compressedObjectTreeModel.ts","vs/base/browser/ui/tree/compressedObjectTreeModel.ts"],"names":[],"mappings":"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","file":"compressedObjectTreeModel.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 { IIdentityProvider } from '../list/list.js';\nimport { getVisibleState, IIndexTreeModelSpliceOptions, isFilterResult } from './indexTreeModel.js';\nimport { IObjectTreeModel, IObjectTreeModelOptions, IObjectTreeModelSetChildrenOptions, ObjectTreeModel } from './objectTreeModel.js';\nimport { ICollapseStateChangeEvent, IObjectTreeElement, ITreeListSpliceData, ITreeModel, ITreeModelSpliceEvent, ITreeNode, TreeError, TreeFilterResult, TreeVisibility, WeakMapper } from './tree.js';\nimport { equals } from '../../../common/arrays.js';\nimport { Event } from '../../../common/event.js';\nimport { Iterable } from '../../../common/iterator.js';\n\n// Exported only for test reasons, do not use directly\nexport interface ICompressedTreeElement<T> extends IObjectTreeElement<T> {\n\treadonly children?: Iterable<ICompressedTreeElement<T>>;\n\treadonly incompressible?: boolean;\n}\n\n// Exported only for test reasons, do not use directly\nexport interface ICompressedTreeNode<T> {\n\treadonly elements: T[];\n\treadonly incompressible: boolean;\n}\n\nfunction noCompress<T>(element: ICompressedTreeElement<T>): ICompressedTreeElement<ICompressedTreeNode<T>> {\n\tconst elements = [element.element];\n\tconst incompressible = element.incompressible || false;\n\n\treturn {\n\t\telement: { elements, incompressible },\n\t\tchildren: Iterable.map(Iterable.from(element.children), noCompress),\n\t\tcollapsible: element.collapsible,\n\t\tcollapsed: element.collapsed\n\t};\n}\n\n// Exported only for test reasons, do not use directly\nexport function compress<T>(element: ICompressedTreeElement<T>): ICompressedTreeElement<ICompressedTreeNode<T>> {\n\tconst elements = [element.element];\n\tconst incompressible = element.incompressible || false;\n\n\tlet childrenIterator: Iterable<ICompressedTreeElement<T>>;\n\tlet children: ICompressedTreeElement<T>[];\n\n\twhile (true) {\n\t\t[children, childrenIterator] = Iterable.consume(Iterable.from(element.children), 2);\n\n\t\tif (children.length !== 1) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (children[0].incompressible) {\n\t\t\tbreak;\n\t\t}\n\n\t\telement = children[0];\n\t\telements.push(element.element);\n\t}\n\n\treturn {\n\t\telement: { elements, incompressible },\n\t\tchildren: Iterable.map(Iterable.concat(children, childrenIterator), compress),\n\t\tcollapsible: element.collapsible,\n\t\tcollapsed: element.collapsed\n\t};\n}\n\nfunction _decompress<T>(element: ICompressedTreeElement<ICompressedTreeNode<T>>, index = 0): ICompressedTreeElement<T> {\n\tlet children: Iterable<ICompressedTreeElement<T>>;\n\n\tif (index < element.element.elements.length - 1) {\n\t\tchildren = [_decompress(element, index + 1)];\n\t} else {\n\t\tchildren = Iterable.map(Iterable.from(element.children), el => _decompress(el, 0));\n\t}\n\n\tif (index === 0 && element.element.incompressible) {\n\t\treturn {\n\t\t\telement: element.element.elements[index],\n\t\t\tchildren,\n\t\t\tincompressible: true,\n\t\t\tcollapsible: element.collapsible,\n\t\t\tcollapsed: element.collapsed\n\t\t};\n\t}\n\n\treturn {\n\t\telement: element.element.elements[index],\n\t\tchildren,\n\t\tcollapsible: element.collapsible,\n\t\tcollapsed: element.collapsed\n\t};\n}\n\n// Exported only for test reasons, do not use directly\nexport function decompress<T>(element: ICompressedTreeElement<ICompressedTreeNode<T>>): ICompressedTreeElement<T> {\n\treturn _decompress(element, 0);\n}\n\nfunction splice<T>(treeElement: ICompressedTreeElement<T>, element: T, children: Iterable<ICompressedTreeElement<T>>): ICompressedTreeElement<T> {\n\tif (treeElement.element === element) {\n\t\treturn { ...treeElement, children };\n\t}\n\n\treturn { ...treeElement, children: Iterable.map(Iterable.from(treeElement.children), e => splice(e, element, children)) };\n}\n\ninterface ICompressedObjectTreeModelOptions<T, TFilterData> extends IObjectTreeModelOptions<ICompressedTreeNode<T>, TFilterData> {\n\treadonly compressionEnabled?: boolean;\n}\n\nconst wrapIdentityProvider = <T>(base: IIdentityProvider<T>): IIdentityProvider<ICompressedTreeNode<T>> => ({\n\tgetId(node) {\n\t\treturn node.elements.map(e => base.getId(e).toString()).join('\\0');\n\t}\n});\n\n// Exported only for test reasons, do not use directly\nexport class CompressedObjectTreeModel<T extends NonNullable<any>, TFilterData extends NonNullable<any> = void> implements ITreeModel<ICompressedTreeNode<T> | null, TFilterData, T | null> {\n\n\treadonly rootRef = null;\n\n\tget onDidSpliceRenderedNodes(): Event<ITreeListSpliceData<ICompressedTreeNode<T> | null, TFilterData>> { return this.model.onDidSpliceRenderedNodes; }\n\tget onDidSpliceModel(): Event<ITreeModelSpliceEvent<ICompressedTreeNode<T> | null, TFilterData>> { return this.model.onDidSpliceModel; }\n\tget onDidChangeCollapseState(): Event<ICollapseStateChangeEvent<ICompressedTreeNode<T>, TFilterData>> { return this.model.onDidChangeCollapseState; }\n\tget onDidChangeRenderNodeCount(): Event<ITreeNode<ICompressedTreeNode<T>, TFilterData>> { return this.model.onDidChangeRenderNodeCount; }\n\n\tprivate model: ObjectTreeModel<ICompressedTreeNode<T>, TFilterData>;\n\tprivate nodes = new Map<T | null, ICompressedTreeNode<T>>();\n\tprivate enabled: boolean;\n\tprivate readonly identityProvider?: IIdentityProvider<ICompressedTreeNode<T>>;\n\n\tconstructor(\n\t\tprivate user: string,\n\t\toptions: ICompressedObjectTreeModelOptions<T, TFilterData> = {}\n\t) {\n\t\tthis.model = new ObjectTreeModel(user, options);\n\t\tthis.enabled = typeof options.compressionEnabled === 'undefined' ? true : options.compressionEnabled;\n\t\tthis.identityProvider = options.identityProvider;\n\t}\n\n\tsetChildren(\n\t\telement: T | null,\n\t\tchildren: Iterable<ICompressedTreeElement<T>> = Iterable.empty(),\n\t\toptions: IObjectTreeModelSetChildrenOptions<T, TFilterData>,\n\t): void {\n\t\t// Diffs must be deep, since the compression can affect nested elements.\n\t\t// @see https://github.com/microsoft/vscode/pull/114237#issuecomment-759425034\n\n\t\tconst diffIdentityProvider = options.diffIdentityProvider && wrapIdentityProvider(options.diffIdentityProvider);\n\t\tif (element === null) {\n\t\t\tconst compressedChildren = Iterable.map(children, this.enabled ? compress : noCompress);\n\t\t\tthis._setChildren(null, compressedChildren, { diffIdentityProvider, diffDepth: Infinity });\n\t\t\treturn;\n\t\t}\n\n\t\tconst compressedNode = this.nodes.get(element);\n\n\t\tif (!compressedNode) {\n\t\t\tthrow new TreeError(this.user, 'Unknown compressed tree node');\n\t\t}\n\n\t\tconst node = this.model.getNode(compressedNode) as ITreeNode<ICompressedTreeNode<T>, TFilterData>;\n\t\tconst compressedParentNode = this.model.getParentNodeLocation(compressedNode);\n\t\tconst parent = this.model.getNode(compressedParentNode) as ITreeNode<ICompressedTreeNode<T>, TFilterData>;\n\n\t\tconst decompressedElement = decompress(node);\n\t\tconst splicedElement = splice(decompressedElement, element, children);\n\t\tconst recompressedElement = (this.enabled ? compress : noCompress)(splicedElement);\n\n\t\t// If the recompressed node is identical to the original, just set its children.\n\t\t// Saves work and churn diffing the parent element.\n\t\tconst elementComparator = options.diffIdentityProvider\n\t\t\t? ((a: T, b: T) => options.diffIdentityProvider!.getId(a) === options.diffIdentityProvider!.getId(b))\n\t\t\t: undefined;\n\t\tif (equals(recompressedElement.element.elements, node.element.elements, elementComparator)) {\n\t\t\tthis._setChildren(compressedNode, recompressedElement.children || Iterable.empty(), { diffIdentityProvider, diffDepth: 1 });\n\t\t\treturn;\n\t\t}\n\n\t\tconst parentChildren = parent.children\n\t\t\t.map(child => child === node ? recompressedElement : child);\n\n\t\tthis._setChildren(parent.element, parentChildren, {\n\t\t\tdiffIdentityProvider,\n\t\t\tdiffDepth: node.depth - parent.depth,\n\t\t});\n\t}\n\n\tisCompressionEnabled(): boolean {\n\t\treturn this.enabled;\n\t}\n\n\tsetCompressionEnabled(enabled: boolean): void {\n\t\tif (enabled === this.enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.enabled = enabled;\n\n\t\tconst root = this.model.getNode();\n\t\tconst rootChildren = root.children as ITreeNode<ICompressedTreeNode<T>>[];\n\t\tconst decompressedRootChildren = Iterable.map(rootChildren, decompress);\n\t\tconst recompressedRootChildren = Iterable.map(decompressedRootChildren, enabled ? compress : noCompress);\n\n\t\t// it should be safe to always use deep diff mode here if an identity\n\t\t// provider is available, since we know the raw nodes are unchanged.\n\t\tthis._setChildren(null, recompressedRootChildren, {\n\t\t\tdiffIdentityProvider: this.identityProvider,\n\t\t\tdiffDepth: Infinity,\n\t\t});\n\t}\n\n\tprivate _setChildren(\n\t\tnode: ICompressedTreeNode<T> | null,\n\t\tchildren: Iterable<IObjectTreeElement<ICompressedTreeNode<T>>>,\n\t\toptions: IIndexTreeModelSpliceOptions<ICompressedTreeNode<T>, TFilterData>,\n\t): void {\n\t\tconst insertedElements = new Set<T | null>();\n\t\tconst onDidCreateNode = (node: ITreeNode<ICompressedTreeNode<T>, TFilterData>) => {\n\t\t\tfor (const element of node.element.elements) {\n\t\t\t\tinsertedElements.add(element);\n\t\t\t\tthis.nodes.set(element, node.element);\n\t\t\t}\n\t\t};\n\n\t\tconst onDidDeleteNode = (node: ITreeNode<ICompressedTreeNode<T>, TFilterData>) => {\n\t\t\tfor (const element of node.element.elements) {\n\t\t\t\tif (!insertedElements.has(element)) {\n\t\t\t\t\tthis.nodes.delete(element);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis.model.setChildren(node, children, { ...options, onDidCreateNode, onDidDeleteNode });\n\t}\n\n\thas(element: T | null): boolean {\n\t\treturn this.nodes.has(element);\n\t}\n\n\tgetListIndex(location: T | null): number {\n\t\tconst node = this.getCompressedNode(location);\n\t\treturn this.model.getListIndex(node);\n\t}\n\n\tgetListRenderCount(location: T | null): number {\n\t\tconst node = this.getCompressedNode(location);\n\t\treturn this.model.getListRenderCount(node);\n\t}\n\n\tgetNode(location?: T | null | undefined): ITreeNode<ICompressedTreeNode<T> | null, TFilterData> {\n\t\tif (typeof location === 'undefined') {\n\t\t\treturn this.model.getNode();\n\t\t}\n\n\t\tconst node = this.getCompressedNode(location);\n\t\treturn this.model.getNode(node);\n\t}\n\n\t// TODO: review this\n\tgetNodeLocation(node: ITreeNode<ICompressedTreeNode<T>, TFilterData>): T | null {\n\t\tconst compressedNode = this.model.getNodeLocation(node);\n\n\t\tif (compressedNode === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn compressedNode.elements[compressedNode.elements.length - 1];\n\t}\n\n\t// TODO: review this\n\tgetParentNodeLocation(location: T | null): T | null {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\tconst parentNode = this.model.getParentNodeLocation(compressedNode);\n\n\t\tif (parentNode === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn parentNode.elements[parentNode.elements.length - 1];\n\t}\n\n\tgetFirstElementChild(location: T | null): ICompressedTreeNode<T> | null | undefined {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.getFirstElementChild(compressedNode);\n\t}\n\n\tisCollapsible(location: T | null): boolean {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.isCollapsible(compressedNode);\n\t}\n\n\tsetCollapsible(location: T | null, collapsible?: boolean): boolean {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.setCollapsible(compressedNode, collapsible);\n\t}\n\n\tisCollapsed(location: T | null): boolean {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.isCollapsed(compressedNode);\n\t}\n\n\tsetCollapsed(location: T | null, collapsed?: boolean | undefined, recursive?: boolean | undefined): boolean {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.setCollapsed(compressedNode, collapsed, recursive);\n\t}\n\n\texpandTo(location: T | null): void {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\tthis.model.expandTo(compressedNode);\n\t}\n\n\trerender(location: T | null): void {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\tthis.model.rerender(compressedNode);\n\t}\n\n\trefilter(): void {\n\t\tthis.model.refilter();\n\t}\n\n\tgetCompressedNode(element: T | null): ICompressedTreeNode<T> | null {\n\t\tif (element === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst node = this.nodes.get(element);\n\n\t\tif (!node) {\n\t\t\tthrow new TreeError(this.user, `Tree element not found: ${element}`);\n\t\t}\n\n\t\treturn node;\n\t}\n}\n\n// Compressible Object Tree\n\nexport type ElementMapper<T> = (elements: T[]) => T;\nexport const DefaultElementMapper: ElementMapper<any> = elements => elements[elements.length - 1];\n\nexport type CompressedNodeUnwrapper<T> = (node: ICompressedTreeNode<T>) => T;\ntype CompressedNodeWeakMapper<T, TFilterData> = WeakMapper<ITreeNode<ICompressedTreeNode<T> | null, TFilterData>, ITreeNode<T | null, TFilterData>>;\n\nclass CompressedTreeNodeWrapper<T, TFilterData> implements ITreeNode<T | null, TFilterData> {\n\n\tget element(): T | null { return this.node.element === null ? null : this.unwrapper(this.node.element); }\n\tget children(): ITreeNode<T | null, TFilterData>[] { return this.node.children.map(node => new CompressedTreeNodeWrapper(this.unwrapper, node)); }\n\tget depth(): number { return this.node.depth; }\n\tget visibleChildrenCount(): number { return this.node.visibleChildrenCount; }\n\tget visibleChildIndex(): number { return this.node.visibleChildIndex; }\n\tget collapsible(): boolean { return this.node.collapsible; }\n\tget collapsed(): boolean { return this.node.collapsed; }\n\tget visible(): boolean { return this.node.visible; }\n\tget filterData(): TFilterData | undefined { return this.node.filterData; }\n\n\tconstructor(\n\t\tprivate unwrapper: CompressedNodeUnwrapper<T>,\n\t\tprivate node: ITreeNode<ICompressedTreeNode<T> | null, TFilterData>\n\t) { }\n}\n\nfunction mapOptions<T, TFilterData>(compressedNodeUnwrapper: CompressedNodeUnwrapper<T>, options: ICompressibleObjectTreeModelOptions<T, TFilterData>): ICompressedObjectTreeModelOptions<T, TFilterData> {\n\treturn {\n\t\t...options,\n\t\tidentityProvider: options.identityProvider && {\n\t\t\tgetId(node: ICompressedTreeNode<T>): { toString(): string } {\n\t\t\t\treturn options.identityProvider!.getId(compressedNodeUnwrapper(node));\n\t\t\t}\n\t\t},\n\t\tsorter: options.sorter && {\n\t\t\tcompare(node: ICompressedTreeNode<T>, otherNode: ICompressedTreeNode<T>): number {\n\t\t\t\treturn options.sorter!.compare(node.elements[0], otherNode.elements[0]);\n\t\t\t}\n\t\t},\n\t\tfilter: options.filter && {\n\t\t\tfilter(node: ICompressedTreeNode<T>, parentVisibility: TreeVisibility): TreeFilterResult<TFilterData> {\n\t\t\t\tconst elements = node.elements;\n\t\t\t\tfor (let i = 0; i < elements.length - 1; i++) {\n\t\t\t\t\tconst result = options.filter!.filter(elements[i], parentVisibility);\n\t\t\t\t\tparentVisibility = getVisibleState(isFilterResult(result) ? result.visibility : result);\n\t\t\t\t}\n\t\t\t\treturn options.filter!.filter(elements[elements.length - 1], parentVisibility);\n\t\t\t}\n\t\t}\n\t};\n}\n\nexport interface ICompressibleObjectTreeModelOptions<T, TFilterData> extends IObjectTreeModelOptions<T, TFilterData> {\n\treadonly elementMapper?: ElementMapper<T>;\n}\n\nexport class CompressibleObjectTreeModel<T extends NonNullable<any>, TFilterData extends NonNullable<any> = void> implements IObjectTreeModel<T, TFilterData> {\n\n\treadonly rootRef = null;\n\n\tget onDidSpliceModel(): Event<ITreeModelSpliceEvent<T | null, TFilterData>> {\n\t\treturn Event.map(this.model.onDidSpliceModel, ({ insertedNodes, deletedNodes }) => ({\n\t\t\tinsertedNodes: insertedNodes.map(node => this.nodeMapper.map(node)),\n\t\t\tdeletedNodes: deletedNodes.map(node => this.nodeMapper.map(node)),\n\t\t}));\n\t}\n\n\tget onDidSpliceRenderedNodes(): Event<ITreeListSpliceData<T | null, TFilterData>> {\n\t\treturn Event.map(this.model.onDidSpliceRenderedNodes, ({ start, deleteCount, elements }) => ({\n\t\t\tstart,\n\t\t\tdeleteCount,\n\t\t\telements: elements.map(node => this.nodeMapper.map(node))\n\t\t}));\n\t}\n\n\tget onDidChangeCollapseState(): Event<ICollapseStateChangeEvent<T | null, TFilterData>> {\n\t\treturn Event.map(this.model.onDidChangeCollapseState, ({ node, deep }) => ({\n\t\t\tnode: this.nodeMapper.map(node),\n\t\t\tdeep\n\t\t}));\n\t}\n\n\tget onDidChangeRenderNodeCount(): Event<ITreeNode<T | null, TFilterData>> {\n\t\treturn Event.map(this.model.onDidChangeRenderNodeCount, node => this.nodeMapper.map(node));\n\t}\n\n\tprivate elementMapper: ElementMapper<T>;\n\tprivate nodeMapper: CompressedNodeWeakMapper<T, TFilterData>;\n\tprivate model: CompressedObjectTreeModel<T, TFilterData>;\n\n\tconstructor(\n\t\tuser: string,\n\t\toptions: ICompressibleObjectTreeModelOptions<T, TFilterData> = {}\n\t) {\n\t\tthis.elementMapper = options.elementMapper || DefaultElementMapper;\n\t\tconst compressedNodeUnwrapper: CompressedNodeUnwrapper<T> = node => this.elementMapper(node.elements);\n\t\tthis.nodeMapper = new WeakMapper(node => new CompressedTreeNodeWrapper(compressedNodeUnwrapper, node));\n\n\t\tthis.model = new CompressedObjectTreeModel(user, mapOptions(compressedNodeUnwrapper, options));\n\t}\n\n\tsetChildren(\n\t\telement: T | null,\n\t\tchildren: Iterable<ICompressedTreeElement<T>> = Iterable.empty(),\n\t\toptions: IObjectTreeModelSetChildrenOptions<T, TFilterData> = {},\n\t): void {\n\t\tthis.model.setChildren(element, children, options);\n\t}\n\n\tisCompressionEnabled(): boolean {\n\t\treturn this.model.isCompressionEnabled();\n\t}\n\n\tsetCompressionEnabled(enabled: boolean): void {\n\t\tthis.model.setCompressionEnabled(enabled);\n\t}\n\n\thas(location: T | null): boolean {\n\t\treturn this.model.has(location);\n\t}\n\n\tgetListIndex(location: T | null): number {\n\t\treturn this.model.getListIndex(location);\n\t}\n\n\tgetListRenderCount(location: T | null): number {\n\t\treturn this.model.getListRenderCount(location);\n\t}\n\n\tgetNode(location?: T | null | undefined): ITreeNode<T | null, any> {\n\t\treturn this.nodeMapper.map(this.model.getNode(location));\n\t}\n\n\tgetNodeLocation(node: ITreeNode<T | null, any>): T | null {\n\t\treturn node.element;\n\t}\n\n\tgetParentNodeLocation(location: T | null): T | null {\n\t\treturn this.model.getParentNodeLocation(location);\n\t}\n\n\tgetFirstElementChild(location: T | null): T | null | undefined {\n\t\tconst result = this.model.getFirstElementChild(location);\n\n\t\tif (result === null || typeof result === 'undefined') {\n\t\t\treturn result;\n\t\t}\n\n\t\treturn this.elementMapper(result.elements);\n\t}\n\n\tisCollapsible(location: T | null): boolean {\n\t\treturn this.model.isCollapsible(location);\n\t}\n\n\tsetCollapsible(location: T | null, collapsed?: boolean): boolean {\n\t\treturn this.model.setCollapsible(location, collapsed);\n\t}\n\n\tisCollapsed(location: T | null): boolean {\n\t\treturn this.model.isCollapsed(location);\n\t}\n\n\tsetCollapsed(location: T | null, collapsed?: boolean | undefined, recursive?: boolean | undefined): boolean {\n\t\treturn this.model.setCollapsed(location, collapsed, recursive);\n\t}\n\n\texpandTo(location: T | null): void {\n\t\treturn this.model.expandTo(location);\n\t}\n\n\trerender(location: T | null): void {\n\t\treturn this.model.rerender(location);\n\t}\n\n\trefilter(): void {\n\t\treturn this.model.refilter();\n\t}\n\n\tgetCompressedTreeNode(location: T | null = null): ITreeNode<ICompressedTreeNode<T> | null, TFilterData> {\n\t\treturn this.model.getNode(location);\n\t}\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IIdentityProvider } from '../list/list.js';\nimport { getVisibleState, IIndexTreeModelSpliceOptions, isFilterResult } from './indexTreeModel.js';\nimport { IObjectTreeModel, IObjectTreeModelOptions, IObjectTreeModelSetChildrenOptions, ObjectTreeModel } from './objectTreeModel.js';\nimport { ICollapseStateChangeEvent, IObjectTreeElement, ITreeListSpliceData, ITreeModel, ITreeModelSpliceEvent, ITreeNode, TreeError, TreeFilterResult, TreeVisibility, WeakMapper } from './tree.js';\nimport { equals } from '../../../common/arrays.js';\nimport { Event } from '../../../common/event.js';\nimport { Iterable } from '../../../common/iterator.js';\n\n// Exported only for test reasons, do not use directly\nexport interface ICompressedTreeElement<T> extends IObjectTreeElement<T> {\n\treadonly children?: Iterable<ICompressedTreeElement<T>>;\n\treadonly incompressible?: boolean;\n}\n\n// Exported only for test reasons, do not use directly\nexport interface ICompressedTreeNode<T> {\n\treadonly elements: T[];\n\treadonly incompressible: boolean;\n}\n\nfunction noCompress<T>(element: ICompressedTreeElement<T>): ICompressedTreeElement<ICompressedTreeNode<T>> {\n\tconst elements = [element.element];\n\tconst incompressible = element.incompressible || false;\n\n\treturn {\n\t\telement: { elements, incompressible },\n\t\tchildren: Iterable.map(Iterable.from(element.children), noCompress),\n\t\tcollapsible: element.collapsible,\n\t\tcollapsed: element.collapsed\n\t};\n}\n\n// Exported only for test reasons, do not use directly\nexport function compress<T>(element: ICompressedTreeElement<T>): ICompressedTreeElement<ICompressedTreeNode<T>> {\n\tconst elements = [element.element];\n\tconst incompressible = element.incompressible || false;\n\n\tlet childrenIterator: Iterable<ICompressedTreeElement<T>>;\n\tlet children: ICompressedTreeElement<T>[];\n\n\twhile (true) {\n\t\t[children, childrenIterator] = Iterable.consume(Iterable.from(element.children), 2);\n\n\t\tif (children.length !== 1) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (children[0].incompressible) {\n\t\t\tbreak;\n\t\t}\n\n\t\telement = children[0];\n\t\telements.push(element.element);\n\t}\n\n\treturn {\n\t\telement: { elements, incompressible },\n\t\tchildren: Iterable.map(Iterable.concat(children, childrenIterator), compress),\n\t\tcollapsible: element.collapsible,\n\t\tcollapsed: element.collapsed\n\t};\n}\n\nfunction _decompress<T>(element: ICompressedTreeElement<ICompressedTreeNode<T>>, index = 0): ICompressedTreeElement<T> {\n\tlet children: Iterable<ICompressedTreeElement<T>>;\n\n\tif (index < element.element.elements.length - 1) {\n\t\tchildren = [_decompress(element, index + 1)];\n\t} else {\n\t\tchildren = Iterable.map(Iterable.from(element.children), el => _decompress(el, 0));\n\t}\n\n\tif (index === 0 && element.element.incompressible) {\n\t\treturn {\n\t\t\telement: element.element.elements[index],\n\t\t\tchildren,\n\t\t\tincompressible: true,\n\t\t\tcollapsible: element.collapsible,\n\t\t\tcollapsed: element.collapsed\n\t\t};\n\t}\n\n\treturn {\n\t\telement: element.element.elements[index],\n\t\tchildren,\n\t\tcollapsible: element.collapsible,\n\t\tcollapsed: element.collapsed\n\t};\n}\n\n// Exported only for test reasons, do not use directly\nexport function decompress<T>(element: ICompressedTreeElement<ICompressedTreeNode<T>>): ICompressedTreeElement<T> {\n\treturn _decompress(element, 0);\n}\n\nfunction splice<T>(treeElement: ICompressedTreeElement<T>, element: T, children: Iterable<ICompressedTreeElement<T>>): ICompressedTreeElement<T> {\n\tif (treeElement.element === element) {\n\t\treturn { ...treeElement, children };\n\t}\n\n\treturn { ...treeElement, children: Iterable.map(Iterable.from(treeElement.children), e => splice(e, element, children)) };\n}\n\ninterface ICompressedObjectTreeModelOptions<T, TFilterData> extends IObjectTreeModelOptions<ICompressedTreeNode<T>, TFilterData> {\n\treadonly compressionEnabled?: boolean;\n}\n\nconst wrapIdentityProvider = <T>(base: IIdentityProvider<T>): IIdentityProvider<ICompressedTreeNode<T>> => ({\n\tgetId(node) {\n\t\treturn node.elements.map(e => base.getId(e).toString()).join('\\0');\n\t}\n});\n\n// Exported only for test reasons, do not use directly\nexport class CompressedObjectTreeModel<T extends NonNullable<any>, TFilterData extends NonNullable<any> = void> implements ITreeModel<ICompressedTreeNode<T> | null, TFilterData, T | null> {\n\n\treadonly rootRef = null;\n\n\tget onDidSpliceRenderedNodes(): Event<ITreeListSpliceData<ICompressedTreeNode<T> | null, TFilterData>> { return this.model.onDidSpliceRenderedNodes; }\n\tget onDidSpliceModel(): Event<ITreeModelSpliceEvent<ICompressedTreeNode<T> | null, TFilterData>> { return this.model.onDidSpliceModel; }\n\tget onDidChangeCollapseState(): Event<ICollapseStateChangeEvent<ICompressedTreeNode<T>, TFilterData>> { return this.model.onDidChangeCollapseState; }\n\tget onDidChangeRenderNodeCount(): Event<ITreeNode<ICompressedTreeNode<T>, TFilterData>> { return this.model.onDidChangeRenderNodeCount; }\n\n\tprivate model: ObjectTreeModel<ICompressedTreeNode<T>, TFilterData>;\n\tprivate nodes = new Map<T | null, ICompressedTreeNode<T>>();\n\tprivate enabled: boolean;\n\tprivate readonly identityProvider?: IIdentityProvider<ICompressedTreeNode<T>>;\n\n\tconstructor(\n\t\tprivate user: string,\n\t\toptions: ICompressedObjectTreeModelOptions<T, TFilterData> = {}\n\t) {\n\t\tthis.model = new ObjectTreeModel(user, options);\n\t\tthis.enabled = typeof options.compressionEnabled === 'undefined' ? true : options.compressionEnabled;\n\t\tthis.identityProvider = options.identityProvider;\n\t}\n\n\tsetChildren(\n\t\telement: T | null,\n\t\tchildren: Iterable<ICompressedTreeElement<T>> = Iterable.empty(),\n\t\toptions: IObjectTreeModelSetChildrenOptions<T, TFilterData>,\n\t): void {\n\t\t// Diffs must be deep, since the compression can affect nested elements.\n\t\t// @see https://github.com/microsoft/vscode/pull/114237#issuecomment-759425034\n\n\t\tconst diffIdentityProvider = options.diffIdentityProvider && wrapIdentityProvider(options.diffIdentityProvider);\n\t\tif (element === null) {\n\t\t\tconst compressedChildren = Iterable.map(children, this.enabled ? compress : noCompress);\n\t\t\tthis._setChildren(null, compressedChildren, { diffIdentityProvider, diffDepth: Infinity });\n\t\t\treturn;\n\t\t}\n\n\t\tconst compressedNode = this.nodes.get(element);\n\n\t\tif (!compressedNode) {\n\t\t\tthrow new TreeError(this.user, 'Unknown compressed tree node');\n\t\t}\n\n\t\tconst node = this.model.getNode(compressedNode) as ITreeNode<ICompressedTreeNode<T>, TFilterData>;\n\t\tconst compressedParentNode = this.model.getParentNodeLocation(compressedNode);\n\t\tconst parent = this.model.getNode(compressedParentNode) as ITreeNode<ICompressedTreeNode<T>, TFilterData>;\n\n\t\tconst decompressedElement = decompress(node);\n\t\tconst splicedElement = splice(decompressedElement, element, children);\n\t\tconst recompressedElement = (this.enabled ? compress : noCompress)(splicedElement);\n\n\t\t// If the recompressed node is identical to the original, just set its children.\n\t\t// Saves work and churn diffing the parent element.\n\t\tconst elementComparator = options.diffIdentityProvider\n\t\t\t? ((a: T, b: T) => options.diffIdentityProvider!.getId(a) === options.diffIdentityProvider!.getId(b))\n\t\t\t: undefined;\n\t\tif (equals(recompressedElement.element.elements, node.element.elements, elementComparator)) {\n\t\t\tthis._setChildren(compressedNode, recompressedElement.children || Iterable.empty(), { diffIdentityProvider, diffDepth: 1 });\n\t\t\treturn;\n\t\t}\n\n\t\tconst parentChildren = parent.children\n\t\t\t.map(child => child === node ? recompressedElement : child);\n\n\t\tthis._setChildren(parent.element, parentChildren, {\n\t\t\tdiffIdentityProvider,\n\t\t\tdiffDepth: node.depth - parent.depth,\n\t\t});\n\t}\n\n\tisCompressionEnabled(): boolean {\n\t\treturn this.enabled;\n\t}\n\n\tsetCompressionEnabled(enabled: boolean): void {\n\t\tif (enabled === this.enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.enabled = enabled;\n\n\t\tconst root = this.model.getNode();\n\t\tconst rootChildren = root.children as ITreeNode<ICompressedTreeNode<T>>[];\n\t\tconst decompressedRootChildren = Iterable.map(rootChildren, decompress);\n\t\tconst recompressedRootChildren = Iterable.map(decompressedRootChildren, enabled ? compress : noCompress);\n\n\t\t// it should be safe to always use deep diff mode here if an identity\n\t\t// provider is available, since we know the raw nodes are unchanged.\n\t\tthis._setChildren(null, recompressedRootChildren, {\n\t\t\tdiffIdentityProvider: this.identityProvider,\n\t\t\tdiffDepth: Infinity,\n\t\t});\n\t}\n\n\tprivate _setChildren(\n\t\tnode: ICompressedTreeNode<T> | null,\n\t\tchildren: Iterable<IObjectTreeElement<ICompressedTreeNode<T>>>,\n\t\toptions: IIndexTreeModelSpliceOptions<ICompressedTreeNode<T>, TFilterData>,\n\t): void {\n\t\tconst insertedElements = new Set<T | null>();\n\t\tconst onDidCreateNode = (node: ITreeNode<ICompressedTreeNode<T>, TFilterData>) => {\n\t\t\tfor (const element of node.element.elements) {\n\t\t\t\tinsertedElements.add(element);\n\t\t\t\tthis.nodes.set(element, node.element);\n\t\t\t}\n\t\t};\n\n\t\tconst onDidDeleteNode = (node: ITreeNode<ICompressedTreeNode<T>, TFilterData>) => {\n\t\t\tfor (const element of node.element.elements) {\n\t\t\t\tif (!insertedElements.has(element)) {\n\t\t\t\t\tthis.nodes.delete(element);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis.model.setChildren(node, children, { ...options, onDidCreateNode, onDidDeleteNode });\n\t}\n\n\thas(element: T | null): boolean {\n\t\treturn this.nodes.has(element);\n\t}\n\n\tgetListIndex(location: T | null): number {\n\t\tconst node = this.getCompressedNode(location);\n\t\treturn this.model.getListIndex(node);\n\t}\n\n\tgetListRenderCount(location: T | null): number {\n\t\tconst node = this.getCompressedNode(location);\n\t\treturn this.model.getListRenderCount(node);\n\t}\n\n\tgetNode(location?: T | null | undefined): ITreeNode<ICompressedTreeNode<T> | null, TFilterData> {\n\t\tif (typeof location === 'undefined') {\n\t\t\treturn this.model.getNode();\n\t\t}\n\n\t\tconst node = this.getCompressedNode(location);\n\t\treturn this.model.getNode(node);\n\t}\n\n\t// TODO: review this\n\tgetNodeLocation(node: ITreeNode<ICompressedTreeNode<T>, TFilterData>): T | null {\n\t\tconst compressedNode = this.model.getNodeLocation(node);\n\n\t\tif (compressedNode === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn compressedNode.elements[compressedNode.elements.length - 1];\n\t}\n\n\t// TODO: review this\n\tgetParentNodeLocation(location: T | null): T | null {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\tconst parentNode = this.model.getParentNodeLocation(compressedNode);\n\n\t\tif (parentNode === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn parentNode.elements[parentNode.elements.length - 1];\n\t}\n\n\tgetFirstElementChild(location: T | null): ICompressedTreeNode<T> | null | undefined {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.getFirstElementChild(compressedNode);\n\t}\n\n\tisCollapsible(location: T | null): boolean {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.isCollapsible(compressedNode);\n\t}\n\n\tsetCollapsible(location: T | null, collapsible?: boolean): boolean {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.setCollapsible(compressedNode, collapsible);\n\t}\n\n\tisCollapsed(location: T | null): boolean {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.isCollapsed(compressedNode);\n\t}\n\n\tsetCollapsed(location: T | null, collapsed?: boolean | undefined, recursive?: boolean | undefined): boolean {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.setCollapsed(compressedNode, collapsed, recursive);\n\t}\n\n\texpandTo(location: T | null): void {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\tthis.model.expandTo(compressedNode);\n\t}\n\n\trerender(location: T | null): void {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\tthis.model.rerender(compressedNode);\n\t}\n\n\trefilter(): void {\n\t\tthis.model.refilter();\n\t}\n\n\tgetCompressedNode(element: T | null): ICompressedTreeNode<T> | null {\n\t\tif (element === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst node = this.nodes.get(element);\n\n\t\tif (!node) {\n\t\t\tthrow new TreeError(this.user, `Tree element not found: ${element}`);\n\t\t}\n\n\t\treturn node;\n\t}\n}\n\n// Compressible Object Tree\n\nexport type ElementMapper<T> = (elements: T[]) => T;\nexport const DefaultElementMapper: ElementMapper<any> = elements => elements[elements.length - 1];\n\nexport type CompressedNodeUnwrapper<T> = (node: ICompressedTreeNode<T>) => T;\ntype CompressedNodeWeakMapper<T, TFilterData> = WeakMapper<ITreeNode<ICompressedTreeNode<T> | null, TFilterData>, ITreeNode<T | null, TFilterData>>;\n\nclass CompressedTreeNodeWrapper<T, TFilterData> implements ITreeNode<T | null, TFilterData> {\n\n\tget element(): T | null { return this.node.element === null ? null : this.unwrapper(this.node.element); }\n\tget children(): ITreeNode<T | null, TFilterData>[] { return this.node.children.map(node => new CompressedTreeNodeWrapper(this.unwrapper, node)); }\n\tget depth(): number { return this.node.depth; }\n\tget visibleChildrenCount(): number { return this.node.visibleChildrenCount; }\n\tget visibleChildIndex(): number { return this.node.visibleChildIndex; }\n\tget collapsible(): boolean { return this.node.collapsible; }\n\tget collapsed(): boolean { return this.node.collapsed; }\n\tget visible(): boolean { return this.node.visible; }\n\tget filterData(): TFilterData | undefined { return this.node.filterData; }\n\n\tconstructor(\n\t\tprivate unwrapper: CompressedNodeUnwrapper<T>,\n\t\tprivate node: ITreeNode<ICompressedTreeNode<T> | null, TFilterData>\n\t) { }\n}\n\nfunction mapOptions<T, TFilterData>(compressedNodeUnwrapper: CompressedNodeUnwrapper<T>, options: ICompressibleObjectTreeModelOptions<T, TFilterData>): ICompressedObjectTreeModelOptions<T, TFilterData> {\n\treturn {\n\t\t...options,\n\t\tidentityProvider: options.identityProvider && {\n\t\t\tgetId(node: ICompressedTreeNode<T>): { toString(): string } {\n\t\t\t\treturn options.identityProvider!.getId(compressedNodeUnwrapper(node));\n\t\t\t}\n\t\t},\n\t\tsorter: options.sorter && {\n\t\t\tcompare(node: ICompressedTreeNode<T>, otherNode: ICompressedTreeNode<T>): number {\n\t\t\t\treturn options.sorter!.compare(node.elements[0], otherNode.elements[0]);\n\t\t\t}\n\t\t},\n\t\tfilter: options.filter && {\n\t\t\tfilter(node: ICompressedTreeNode<T>, parentVisibility: TreeVisibility): TreeFilterResult<TFilterData> {\n\t\t\t\tconst elements = node.elements;\n\t\t\t\tfor (let i = 0; i < elements.length - 1; i++) {\n\t\t\t\t\tconst result = options.filter!.filter(elements[i], parentVisibility);\n\t\t\t\t\tparentVisibility = getVisibleState(isFilterResult(result) ? result.visibility : result);\n\t\t\t\t}\n\t\t\t\treturn options.filter!.filter(elements[elements.length - 1], parentVisibility);\n\t\t\t}\n\t\t}\n\t};\n}\n\nexport interface ICompressibleObjectTreeModelOptions<T, TFilterData> extends IObjectTreeModelOptions<T, TFilterData> {\n\treadonly elementMapper?: ElementMapper<T>;\n}\n\nexport class CompressibleObjectTreeModel<T extends NonNullable<any>, TFilterData extends NonNullable<any> = void> implements IObjectTreeModel<T, TFilterData> {\n\n\treadonly rootRef = null;\n\n\tget onDidSpliceModel(): Event<ITreeModelSpliceEvent<T | null, TFilterData>> {\n\t\treturn Event.map(this.model.onDidSpliceModel, ({ insertedNodes, deletedNodes }) => ({\n\t\t\tinsertedNodes: insertedNodes.map(node => this.nodeMapper.map(node)),\n\t\t\tdeletedNodes: deletedNodes.map(node => this.nodeMapper.map(node)),\n\t\t}));\n\t}\n\n\tget onDidSpliceRenderedNodes(): Event<ITreeListSpliceData<T | null, TFilterData>> {\n\t\treturn Event.map(this.model.onDidSpliceRenderedNodes, ({ start, deleteCount, elements }) => ({\n\t\t\tstart,\n\t\t\tdeleteCount,\n\t\t\telements: elements.map(node => this.nodeMapper.map(node))\n\t\t}));\n\t}\n\n\tget onDidChangeCollapseState(): Event<ICollapseStateChangeEvent<T | null, TFilterData>> {\n\t\treturn Event.map(this.model.onDidChangeCollapseState, ({ node, deep }) => ({\n\t\t\tnode: this.nodeMapper.map(node),\n\t\t\tdeep\n\t\t}));\n\t}\n\n\tget onDidChangeRenderNodeCount(): Event<ITreeNode<T | null, TFilterData>> {\n\t\treturn Event.map(this.model.onDidChangeRenderNodeCount, node => this.nodeMapper.map(node));\n\t}\n\n\tprivate elementMapper: ElementMapper<T>;\n\tprivate nodeMapper: CompressedNodeWeakMapper<T, TFilterData>;\n\tprivate model: CompressedObjectTreeModel<T, TFilterData>;\n\n\tconstructor(\n\t\tuser: string,\n\t\toptions: ICompressibleObjectTreeModelOptions<T, TFilterData> = {}\n\t) {\n\t\tthis.elementMapper = options.elementMapper || DefaultElementMapper;\n\t\tconst compressedNodeUnwrapper: CompressedNodeUnwrapper<T> = node => this.elementMapper(node.elements);\n\t\tthis.nodeMapper = new WeakMapper(node => new CompressedTreeNodeWrapper(compressedNodeUnwrapper, node));\n\n\t\tthis.model = new CompressedObjectTreeModel(user, mapOptions(compressedNodeUnwrapper, options));\n\t}\n\n\tsetChildren(\n\t\telement: T | null,\n\t\tchildren: Iterable<ICompressedTreeElement<T>> = Iterable.empty(),\n\t\toptions: IObjectTreeModelSetChildrenOptions<T, TFilterData> = {},\n\t): void {\n\t\tthis.model.setChildren(element, children, options);\n\t}\n\n\tisCompressionEnabled(): boolean {\n\t\treturn this.model.isCompressionEnabled();\n\t}\n\n\tsetCompressionEnabled(enabled: boolean): void {\n\t\tthis.model.setCompressionEnabled(enabled);\n\t}\n\n\thas(location: T | null): boolean {\n\t\treturn this.model.has(location);\n\t}\n\n\tgetListIndex(location: T | null): number {\n\t\treturn this.model.getListIndex(location);\n\t}\n\n\tgetListRenderCount(location: T | null): number {\n\t\treturn this.model.getListRenderCount(location);\n\t}\n\n\tgetNode(location?: T | null | undefined): ITreeNode<T | null, any> {\n\t\treturn this.nodeMapper.map(this.model.getNode(location));\n\t}\n\n\tgetNodeLocation(node: ITreeNode<T | null, any>): T | null {\n\t\treturn node.element;\n\t}\n\n\tgetParentNodeLocation(location: T | null): T | null {\n\t\treturn this.model.getParentNodeLocation(location);\n\t}\n\n\tgetFirstElementChild(location: T | null): T | null | undefined {\n\t\tconst result = this.model.getFirstElementChild(location);\n\n\t\tif (result === null || typeof result === 'undefined') {\n\t\t\treturn result;\n\t\t}\n\n\t\treturn this.elementMapper(result.elements);\n\t}\n\n\tisCollapsible(location: T | null): boolean {\n\t\treturn this.model.isCollapsible(location);\n\t}\n\n\tsetCollapsible(location: T | null, collapsed?: boolean): boolean {\n\t\treturn this.model.setCollapsible(location, collapsed);\n\t}\n\n\tisCollapsed(location: T | null): boolean {\n\t\treturn this.model.isCollapsed(location);\n\t}\n\n\tsetCollapsed(location: T | null, collapsed?: boolean | undefined, recursive?: boolean | undefined): boolean {\n\t\treturn this.model.setCollapsed(location, collapsed, recursive);\n\t}\n\n\texpandTo(location: T | null): void {\n\t\treturn this.model.expandTo(location);\n\t}\n\n\trerender(location: T | null): void {\n\t\treturn this.model.rerender(location);\n\t}\n\n\trefilter(): void {\n\t\treturn this.model.refilter();\n\t}\n\n\tgetCompressedTreeNode(location: T | null = null): ITreeNode<ICompressedTreeNode<T> | null, TFilterData> {\n\t\treturn this.model.getNode(location);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/browser/ui/tree/compressedObjectTreeModel.ts","vs/base/browser/ui/tree/compressedObjectTreeModel.ts"],"names":[],"mappings":"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","file":"compressedObjectTreeModel.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 { IIdentityProvider } from '../list/list.js';\nimport { getVisibleState, IIndexTreeModelSpliceOptions, isFilterResult } from './indexTreeModel.js';\nimport { IObjectTreeModel, IObjectTreeModelOptions, IObjectTreeModelSetChildrenOptions, ObjectTreeModel } from './objectTreeModel.js';\nimport { ICollapseStateChangeEvent, IObjectTreeElement, ITreeListSpliceData, ITreeModel, ITreeModelSpliceEvent, ITreeNode, TreeError, TreeFilterResult, TreeVisibility, WeakMapper } from './tree.js';\nimport { equals } from '../../../common/arrays.js';\nimport { Event } from '../../../common/event.js';\nimport { Iterable } from '../../../common/iterator.js';\n\n// Exported only for test reasons, do not use directly\nexport interface ICompressedTreeElement<T> extends IObjectTreeElement<T> {\n\treadonly children?: Iterable<ICompressedTreeElement<T>>;\n\treadonly incompressible?: boolean;\n}\n\n// Exported only for test reasons, do not use directly\nexport interface ICompressedTreeNode<T> {\n\treadonly elements: T[];\n\treadonly incompressible: boolean;\n}\n\nfunction noCompress<T>(element: ICompressedTreeElement<T>): ICompressedTreeElement<ICompressedTreeNode<T>> {\n\tconst elements = [element.element];\n\tconst incompressible = element.incompressible || false;\n\n\treturn {\n\t\telement: { elements, incompressible },\n\t\tchildren: Iterable.map(Iterable.from(element.children), noCompress),\n\t\tcollapsible: element.collapsible,\n\t\tcollapsed: element.collapsed\n\t};\n}\n\n// Exported only for test reasons, do not use directly\nexport function compress<T>(element: ICompressedTreeElement<T>): ICompressedTreeElement<ICompressedTreeNode<T>> {\n\tconst elements = [element.element];\n\tconst incompressible = element.incompressible || false;\n\n\tlet childrenIterator: Iterable<ICompressedTreeElement<T>>;\n\tlet children: ICompressedTreeElement<T>[];\n\n\twhile (true) {\n\t\t[children, childrenIterator] = Iterable.consume(Iterable.from(element.children), 2);\n\n\t\tif (children.length !== 1) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (children[0].incompressible) {\n\t\t\tbreak;\n\t\t}\n\n\t\telement = children[0];\n\t\telements.push(element.element);\n\t}\n\n\treturn {\n\t\telement: { elements, incompressible },\n\t\tchildren: Iterable.map(Iterable.concat(children, childrenIterator), compress),\n\t\tcollapsible: element.collapsible,\n\t\tcollapsed: element.collapsed\n\t};\n}\n\nfunction _decompress<T>(element: ICompressedTreeElement<ICompressedTreeNode<T>>, index = 0): ICompressedTreeElement<T> {\n\tlet children: Iterable<ICompressedTreeElement<T>>;\n\n\tif (index < element.element.elements.length - 1) {\n\t\tchildren = [_decompress(element, index + 1)];\n\t} else {\n\t\tchildren = Iterable.map(Iterable.from(element.children), el => _decompress(el, 0));\n\t}\n\n\tif (index === 0 && element.element.incompressible) {\n\t\treturn {\n\t\t\telement: element.element.elements[index],\n\t\t\tchildren,\n\t\t\tincompressible: true,\n\t\t\tcollapsible: element.collapsible,\n\t\t\tcollapsed: element.collapsed\n\t\t};\n\t}\n\n\treturn {\n\t\telement: element.element.elements[index],\n\t\tchildren,\n\t\tcollapsible: element.collapsible,\n\t\tcollapsed: element.collapsed\n\t};\n}\n\n// Exported only for test reasons, do not use directly\nexport function decompress<T>(element: ICompressedTreeElement<ICompressedTreeNode<T>>): ICompressedTreeElement<T> {\n\treturn _decompress(element, 0);\n}\n\nfunction splice<T>(treeElement: ICompressedTreeElement<T>, element: T, children: Iterable<ICompressedTreeElement<T>>): ICompressedTreeElement<T> {\n\tif (treeElement.element === element) {\n\t\treturn { ...treeElement, children };\n\t}\n\n\treturn { ...treeElement, children: Iterable.map(Iterable.from(treeElement.children), e => splice(e, element, children)) };\n}\n\ninterface ICompressedObjectTreeModelOptions<T, TFilterData> extends IObjectTreeModelOptions<ICompressedTreeNode<T>, TFilterData> {\n\treadonly compressionEnabled?: boolean;\n}\n\nconst wrapIdentityProvider = <T>(base: IIdentityProvider<T>): IIdentityProvider<ICompressedTreeNode<T>> => ({\n\tgetId(node) {\n\t\treturn node.elements.map(e => base.getId(e).toString()).join('\\0');\n\t}\n});\n\n// Exported only for test reasons, do not use directly\nexport class CompressedObjectTreeModel<T extends NonNullable<any>, TFilterData extends NonNullable<any> = void> implements ITreeModel<ICompressedTreeNode<T> | null, TFilterData, T | null> {\n\n\treadonly rootRef = null;\n\n\tget onDidSpliceRenderedNodes(): Event<ITreeListSpliceData<ICompressedTreeNode<T> | null, TFilterData>> { return this.model.onDidSpliceRenderedNodes; }\n\tget onDidSpliceModel(): Event<ITreeModelSpliceEvent<ICompressedTreeNode<T> | null, TFilterData>> { return this.model.onDidSpliceModel; }\n\tget onDidChangeCollapseState(): Event<ICollapseStateChangeEvent<ICompressedTreeNode<T>, TFilterData>> { return this.model.onDidChangeCollapseState; }\n\tget onDidChangeRenderNodeCount(): Event<ITreeNode<ICompressedTreeNode<T>, TFilterData>> { return this.model.onDidChangeRenderNodeCount; }\n\n\tprivate model: ObjectTreeModel<ICompressedTreeNode<T>, TFilterData>;\n\tprivate nodes = new Map<T | null, ICompressedTreeNode<T>>();\n\tprivate enabled: boolean;\n\tprivate readonly identityProvider?: IIdentityProvider<ICompressedTreeNode<T>>;\n\n\tconstructor(\n\t\tprivate user: string,\n\t\toptions: ICompressedObjectTreeModelOptions<T, TFilterData> = {}\n\t) {\n\t\tthis.model = new ObjectTreeModel(user, options);\n\t\tthis.enabled = typeof options.compressionEnabled === 'undefined' ? true : options.compressionEnabled;\n\t\tthis.identityProvider = options.identityProvider;\n\t}\n\n\tsetChildren(\n\t\telement: T | null,\n\t\tchildren: Iterable<ICompressedTreeElement<T>> = Iterable.empty(),\n\t\toptions: IObjectTreeModelSetChildrenOptions<T, TFilterData>,\n\t): void {\n\t\t// Diffs must be deep, since the compression can affect nested elements.\n\t\t// @see https://github.com/microsoft/vscode/pull/114237#issuecomment-759425034\n\n\t\tconst diffIdentityProvider = options.diffIdentityProvider && wrapIdentityProvider(options.diffIdentityProvider);\n\t\tif (element === null) {\n\t\t\tconst compressedChildren = Iterable.map(children, this.enabled ? compress : noCompress);\n\t\t\tthis._setChildren(null, compressedChildren, { diffIdentityProvider, diffDepth: Infinity });\n\t\t\treturn;\n\t\t}\n\n\t\tconst compressedNode = this.nodes.get(element);\n\n\t\tif (!compressedNode) {\n\t\t\tthrow new TreeError(this.user, 'Unknown compressed tree node');\n\t\t}\n\n\t\tconst node = this.model.getNode(compressedNode) as ITreeNode<ICompressedTreeNode<T>, TFilterData>;\n\t\tconst compressedParentNode = this.model.getParentNodeLocation(compressedNode);\n\t\tconst parent = this.model.getNode(compressedParentNode) as ITreeNode<ICompressedTreeNode<T>, TFilterData>;\n\n\t\tconst decompressedElement = decompress(node);\n\t\tconst splicedElement = splice(decompressedElement, element, children);\n\t\tconst recompressedElement = (this.enabled ? compress : noCompress)(splicedElement);\n\n\t\t// If the recompressed node is identical to the original, just set its children.\n\t\t// Saves work and churn diffing the parent element.\n\t\tconst elementComparator = options.diffIdentityProvider\n\t\t\t? ((a: T, b: T) => options.diffIdentityProvider!.getId(a) === options.diffIdentityProvider!.getId(b))\n\t\t\t: undefined;\n\t\tif (equals(recompressedElement.element.elements, node.element.elements, elementComparator)) {\n\t\t\tthis._setChildren(compressedNode, recompressedElement.children || Iterable.empty(), { diffIdentityProvider, diffDepth: 1 });\n\t\t\treturn;\n\t\t}\n\n\t\tconst parentChildren = parent.children\n\t\t\t.map(child => child === node ? recompressedElement : child);\n\n\t\tthis._setChildren(parent.element, parentChildren, {\n\t\t\tdiffIdentityProvider,\n\t\t\tdiffDepth: node.depth - parent.depth,\n\t\t});\n\t}\n\n\tisCompressionEnabled(): boolean {\n\t\treturn this.enabled;\n\t}\n\n\tsetCompressionEnabled(enabled: boolean): void {\n\t\tif (enabled === this.enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.enabled = enabled;\n\n\t\tconst root = this.model.getNode();\n\t\tconst rootChildren = root.children as ITreeNode<ICompressedTreeNode<T>>[];\n\t\tconst decompressedRootChildren = Iterable.map(rootChildren, decompress);\n\t\tconst recompressedRootChildren = Iterable.map(decompressedRootChildren, enabled ? compress : noCompress);\n\n\t\t// it should be safe to always use deep diff mode here if an identity\n\t\t// provider is available, since we know the raw nodes are unchanged.\n\t\tthis._setChildren(null, recompressedRootChildren, {\n\t\t\tdiffIdentityProvider: this.identityProvider,\n\t\t\tdiffDepth: Infinity,\n\t\t});\n\t}\n\n\tprivate _setChildren(\n\t\tnode: ICompressedTreeNode<T> | null,\n\t\tchildren: Iterable<IObjectTreeElement<ICompressedTreeNode<T>>>,\n\t\toptions: IIndexTreeModelSpliceOptions<ICompressedTreeNode<T>, TFilterData>,\n\t): void {\n\t\tconst insertedElements = new Set<T | null>();\n\t\tconst onDidCreateNode = (node: ITreeNode<ICompressedTreeNode<T>, TFilterData>) => {\n\t\t\tfor (const element of node.element.elements) {\n\t\t\t\tinsertedElements.add(element);\n\t\t\t\tthis.nodes.set(element, node.element);\n\t\t\t}\n\t\t};\n\n\t\tconst onDidDeleteNode = (node: ITreeNode<ICompressedTreeNode<T>, TFilterData>) => {\n\t\t\tfor (const element of node.element.elements) {\n\t\t\t\tif (!insertedElements.has(element)) {\n\t\t\t\t\tthis.nodes.delete(element);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis.model.setChildren(node, children, { ...options, onDidCreateNode, onDidDeleteNode });\n\t}\n\n\thas(element: T | null): boolean {\n\t\treturn this.nodes.has(element);\n\t}\n\n\tgetListIndex(location: T | null): number {\n\t\tconst node = this.getCompressedNode(location);\n\t\treturn this.model.getListIndex(node);\n\t}\n\n\tgetListRenderCount(location: T | null): number {\n\t\tconst node = this.getCompressedNode(location);\n\t\treturn this.model.getListRenderCount(node);\n\t}\n\n\tgetNode(location?: T | null | undefined): ITreeNode<ICompressedTreeNode<T> | null, TFilterData> {\n\t\tif (typeof location === 'undefined') {\n\t\t\treturn this.model.getNode();\n\t\t}\n\n\t\tconst node = this.getCompressedNode(location);\n\t\treturn this.model.getNode(node);\n\t}\n\n\t// TODO: review this\n\tgetNodeLocation(node: ITreeNode<ICompressedTreeNode<T>, TFilterData>): T | null {\n\t\tconst compressedNode = this.model.getNodeLocation(node);\n\n\t\tif (compressedNode === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn compressedNode.elements[compressedNode.elements.length - 1];\n\t}\n\n\t// TODO: review this\n\tgetParentNodeLocation(location: T | null): T | null {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\tconst parentNode = this.model.getParentNodeLocation(compressedNode);\n\n\t\tif (parentNode === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn parentNode.elements[parentNode.elements.length - 1];\n\t}\n\n\tgetFirstElementChild(location: T | null): ICompressedTreeNode<T> | null | undefined {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.getFirstElementChild(compressedNode);\n\t}\n\n\tisCollapsible(location: T | null): boolean {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.isCollapsible(compressedNode);\n\t}\n\n\tsetCollapsible(location: T | null, collapsible?: boolean): boolean {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.setCollapsible(compressedNode, collapsible);\n\t}\n\n\tisCollapsed(location: T | null): boolean {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.isCollapsed(compressedNode);\n\t}\n\n\tsetCollapsed(location: T | null, collapsed?: boolean | undefined, recursive?: boolean | undefined): boolean {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.setCollapsed(compressedNode, collapsed, recursive);\n\t}\n\n\texpandTo(location: T | null): void {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\tthis.model.expandTo(compressedNode);\n\t}\n\n\trerender(location: T | null): void {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\tthis.model.rerender(compressedNode);\n\t}\n\n\trefilter(): void {\n\t\tthis.model.refilter();\n\t}\n\n\tresort(location: T | null = null, recursive = true): void {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\tthis.model.resort(compressedNode, recursive);\n\t}\n\n\tgetCompressedNode(element: T | null): ICompressedTreeNode<T> | null {\n\t\tif (element === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst node = this.nodes.get(element);\n\n\t\tif (!node) {\n\t\t\tthrow new TreeError(this.user, `Tree element not found: ${element}`);\n\t\t}\n\n\t\treturn node;\n\t}\n}\n\n// Compressible Object Tree\n\nexport type ElementMapper<T> = (elements: T[]) => T;\nexport const DefaultElementMapper: ElementMapper<any> = elements => elements[elements.length - 1];\n\nexport type CompressedNodeUnwrapper<T> = (node: ICompressedTreeNode<T>) => T;\ntype CompressedNodeWeakMapper<T, TFilterData> = WeakMapper<ITreeNode<ICompressedTreeNode<T> | null, TFilterData>, ITreeNode<T | null, TFilterData>>;\n\nclass CompressedTreeNodeWrapper<T, TFilterData> implements ITreeNode<T | null, TFilterData> {\n\n\tget element(): T | null { return this.node.element === null ? null : this.unwrapper(this.node.element); }\n\tget children(): ITreeNode<T | null, TFilterData>[] { return this.node.children.map(node => new CompressedTreeNodeWrapper(this.unwrapper, node)); }\n\tget depth(): number { return this.node.depth; }\n\tget visibleChildrenCount(): number { return this.node.visibleChildrenCount; }\n\tget visibleChildIndex(): number { return this.node.visibleChildIndex; }\n\tget collapsible(): boolean { return this.node.collapsible; }\n\tget collapsed(): boolean { return this.node.collapsed; }\n\tget visible(): boolean { return this.node.visible; }\n\tget filterData(): TFilterData | undefined { return this.node.filterData; }\n\n\tconstructor(\n\t\tprivate unwrapper: CompressedNodeUnwrapper<T>,\n\t\tprivate node: ITreeNode<ICompressedTreeNode<T> | null, TFilterData>\n\t) { }\n}\n\nfunction mapOptions<T, TFilterData>(compressedNodeUnwrapper: CompressedNodeUnwrapper<T>, options: ICompressibleObjectTreeModelOptions<T, TFilterData>): ICompressedObjectTreeModelOptions<T, TFilterData> {\n\treturn {\n\t\t...options,\n\t\tidentityProvider: options.identityProvider && {\n\t\t\tgetId(node: ICompressedTreeNode<T>): { toString(): string } {\n\t\t\t\treturn options.identityProvider!.getId(compressedNodeUnwrapper(node));\n\t\t\t}\n\t\t},\n\t\tsorter: options.sorter && {\n\t\t\tcompare(node: ICompressedTreeNode<T>, otherNode: ICompressedTreeNode<T>): number {\n\t\t\t\treturn options.sorter!.compare(node.elements[0], otherNode.elements[0]);\n\t\t\t}\n\t\t},\n\t\tfilter: options.filter && {\n\t\t\tfilter(node: ICompressedTreeNode<T>, parentVisibility: TreeVisibility): TreeFilterResult<TFilterData> {\n\t\t\t\tconst elements = node.elements;\n\t\t\t\tfor (let i = 0; i < elements.length - 1; i++) {\n\t\t\t\t\tconst result = options.filter!.filter(elements[i], parentVisibility);\n\t\t\t\t\tparentVisibility = getVisibleState(isFilterResult(result) ? result.visibility : result);\n\t\t\t\t}\n\t\t\t\treturn options.filter!.filter(elements[elements.length - 1], parentVisibility);\n\t\t\t}\n\t\t}\n\t};\n}\n\nexport interface ICompressibleObjectTreeModelOptions<T, TFilterData> extends IObjectTreeModelOptions<T, TFilterData> {\n\treadonly elementMapper?: ElementMapper<T>;\n}\n\nexport class CompressibleObjectTreeModel<T extends NonNullable<any>, TFilterData extends NonNullable<any> = void> implements IObjectTreeModel<T, TFilterData> {\n\n\treadonly rootRef = null;\n\n\tget onDidSpliceModel(): Event<ITreeModelSpliceEvent<T | null, TFilterData>> {\n\t\treturn Event.map(this.model.onDidSpliceModel, ({ insertedNodes, deletedNodes }) => ({\n\t\t\tinsertedNodes: insertedNodes.map(node => this.nodeMapper.map(node)),\n\t\t\tdeletedNodes: deletedNodes.map(node => this.nodeMapper.map(node)),\n\t\t}));\n\t}\n\n\tget onDidSpliceRenderedNodes(): Event<ITreeListSpliceData<T | null, TFilterData>> {\n\t\treturn Event.map(this.model.onDidSpliceRenderedNodes, ({ start, deleteCount, elements }) => ({\n\t\t\tstart,\n\t\t\tdeleteCount,\n\t\t\telements: elements.map(node => this.nodeMapper.map(node))\n\t\t}));\n\t}\n\n\tget onDidChangeCollapseState(): Event<ICollapseStateChangeEvent<T | null, TFilterData>> {\n\t\treturn Event.map(this.model.onDidChangeCollapseState, ({ node, deep }) => ({\n\t\t\tnode: this.nodeMapper.map(node),\n\t\t\tdeep\n\t\t}));\n\t}\n\n\tget onDidChangeRenderNodeCount(): Event<ITreeNode<T | null, TFilterData>> {\n\t\treturn Event.map(this.model.onDidChangeRenderNodeCount, node => this.nodeMapper.map(node));\n\t}\n\n\tprivate elementMapper: ElementMapper<T>;\n\tprivate nodeMapper: CompressedNodeWeakMapper<T, TFilterData>;\n\tprivate model: CompressedObjectTreeModel<T, TFilterData>;\n\n\tconstructor(\n\t\tuser: string,\n\t\toptions: ICompressibleObjectTreeModelOptions<T, TFilterData> = {}\n\t) {\n\t\tthis.elementMapper = options.elementMapper || DefaultElementMapper;\n\t\tconst compressedNodeUnwrapper: CompressedNodeUnwrapper<T> = node => this.elementMapper(node.elements);\n\t\tthis.nodeMapper = new WeakMapper(node => new CompressedTreeNodeWrapper(compressedNodeUnwrapper, node));\n\n\t\tthis.model = new CompressedObjectTreeModel(user, mapOptions(compressedNodeUnwrapper, options));\n\t}\n\n\tsetChildren(\n\t\telement: T | null,\n\t\tchildren: Iterable<ICompressedTreeElement<T>> = Iterable.empty(),\n\t\toptions: IObjectTreeModelSetChildrenOptions<T, TFilterData> = {},\n\t): void {\n\t\tthis.model.setChildren(element, children, options);\n\t}\n\n\tisCompressionEnabled(): boolean {\n\t\treturn this.model.isCompressionEnabled();\n\t}\n\n\tsetCompressionEnabled(enabled: boolean): void {\n\t\tthis.model.setCompressionEnabled(enabled);\n\t}\n\n\thas(location: T | null): boolean {\n\t\treturn this.model.has(location);\n\t}\n\n\tgetListIndex(location: T | null): number {\n\t\treturn this.model.getListIndex(location);\n\t}\n\n\tgetListRenderCount(location: T | null): number {\n\t\treturn this.model.getListRenderCount(location);\n\t}\n\n\tgetNode(location?: T | null | undefined): ITreeNode<T | null, any> {\n\t\treturn this.nodeMapper.map(this.model.getNode(location));\n\t}\n\n\tgetNodeLocation(node: ITreeNode<T | null, any>): T | null {\n\t\treturn node.element;\n\t}\n\n\tgetParentNodeLocation(location: T | null): T | null {\n\t\treturn this.model.getParentNodeLocation(location);\n\t}\n\n\tgetFirstElementChild(location: T | null): T | null | undefined {\n\t\tconst result = this.model.getFirstElementChild(location);\n\n\t\tif (result === null || typeof result === 'undefined') {\n\t\t\treturn result;\n\t\t}\n\n\t\treturn this.elementMapper(result.elements);\n\t}\n\n\tisCollapsible(location: T | null): boolean {\n\t\treturn this.model.isCollapsible(location);\n\t}\n\n\tsetCollapsible(location: T | null, collapsed?: boolean): boolean {\n\t\treturn this.model.setCollapsible(location, collapsed);\n\t}\n\n\tisCollapsed(location: T | null): boolean {\n\t\treturn this.model.isCollapsed(location);\n\t}\n\n\tsetCollapsed(location: T | null, collapsed?: boolean | undefined, recursive?: boolean | undefined): boolean {\n\t\treturn this.model.setCollapsed(location, collapsed, recursive);\n\t}\n\n\texpandTo(location: T | null): void {\n\t\treturn this.model.expandTo(location);\n\t}\n\n\trerender(location: T | null): void {\n\t\treturn this.model.rerender(location);\n\t}\n\n\trefilter(): void {\n\t\treturn this.model.refilter();\n\t}\n\n\tresort(element: T | null = null, recursive = true): void {\n\t\treturn this.model.resort(element, recursive);\n\t}\n\n\tgetCompressedTreeNode(location: T | null = null): ITreeNode<ICompressedTreeNode<T> | null, TFilterData> {\n\t\treturn this.model.getNode(location);\n\t}\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IIdentityProvider } from '../list/list.js';\nimport { getVisibleState, IIndexTreeModelSpliceOptions, isFilterResult } from './indexTreeModel.js';\nimport { IObjectTreeModel, IObjectTreeModelOptions, IObjectTreeModelSetChildrenOptions, ObjectTreeModel } from './objectTreeModel.js';\nimport { ICollapseStateChangeEvent, IObjectTreeElement, ITreeListSpliceData, ITreeModel, ITreeModelSpliceEvent, ITreeNode, TreeError, TreeFilterResult, TreeVisibility, WeakMapper } from './tree.js';\nimport { equals } from '../../../common/arrays.js';\nimport { Event } from '../../../common/event.js';\nimport { Iterable } from '../../../common/iterator.js';\n\n// Exported only for test reasons, do not use directly\nexport interface ICompressedTreeElement<T> extends IObjectTreeElement<T> {\n\treadonly children?: Iterable<ICompressedTreeElement<T>>;\n\treadonly incompressible?: boolean;\n}\n\n// Exported only for test reasons, do not use directly\nexport interface ICompressedTreeNode<T> {\n\treadonly elements: T[];\n\treadonly incompressible: boolean;\n}\n\nfunction noCompress<T>(element: ICompressedTreeElement<T>): ICompressedTreeElement<ICompressedTreeNode<T>> {\n\tconst elements = [element.element];\n\tconst incompressible = element.incompressible || false;\n\n\treturn {\n\t\telement: { elements, incompressible },\n\t\tchildren: Iterable.map(Iterable.from(element.children), noCompress),\n\t\tcollapsible: element.collapsible,\n\t\tcollapsed: element.collapsed\n\t};\n}\n\n// Exported only for test reasons, do not use directly\nexport function compress<T>(element: ICompressedTreeElement<T>): ICompressedTreeElement<ICompressedTreeNode<T>> {\n\tconst elements = [element.element];\n\tconst incompressible = element.incompressible || false;\n\n\tlet childrenIterator: Iterable<ICompressedTreeElement<T>>;\n\tlet children: ICompressedTreeElement<T>[];\n\n\twhile (true) {\n\t\t[children, childrenIterator] = Iterable.consume(Iterable.from(element.children), 2);\n\n\t\tif (children.length !== 1) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (children[0].incompressible) {\n\t\t\tbreak;\n\t\t}\n\n\t\telement = children[0];\n\t\telements.push(element.element);\n\t}\n\n\treturn {\n\t\telement: { elements, incompressible },\n\t\tchildren: Iterable.map(Iterable.concat(children, childrenIterator), compress),\n\t\tcollapsible: element.collapsible,\n\t\tcollapsed: element.collapsed\n\t};\n}\n\nfunction _decompress<T>(element: ICompressedTreeElement<ICompressedTreeNode<T>>, index = 0): ICompressedTreeElement<T> {\n\tlet children: Iterable<ICompressedTreeElement<T>>;\n\n\tif (index < element.element.elements.length - 1) {\n\t\tchildren = [_decompress(element, index + 1)];\n\t} else {\n\t\tchildren = Iterable.map(Iterable.from(element.children), el => _decompress(el, 0));\n\t}\n\n\tif (index === 0 && element.element.incompressible) {\n\t\treturn {\n\t\t\telement: element.element.elements[index],\n\t\t\tchildren,\n\t\t\tincompressible: true,\n\t\t\tcollapsible: element.collapsible,\n\t\t\tcollapsed: element.collapsed\n\t\t};\n\t}\n\n\treturn {\n\t\telement: element.element.elements[index],\n\t\tchildren,\n\t\tcollapsible: element.collapsible,\n\t\tcollapsed: element.collapsed\n\t};\n}\n\n// Exported only for test reasons, do not use directly\nexport function decompress<T>(element: ICompressedTreeElement<ICompressedTreeNode<T>>): ICompressedTreeElement<T> {\n\treturn _decompress(element, 0);\n}\n\nfunction splice<T>(treeElement: ICompressedTreeElement<T>, element: T, children: Iterable<ICompressedTreeElement<T>>): ICompressedTreeElement<T> {\n\tif (treeElement.element === element) {\n\t\treturn { ...treeElement, children };\n\t}\n\n\treturn { ...treeElement, children: Iterable.map(Iterable.from(treeElement.children), e => splice(e, element, children)) };\n}\n\ninterface ICompressedObjectTreeModelOptions<T, TFilterData> extends IObjectTreeModelOptions<ICompressedTreeNode<T>, TFilterData> {\n\treadonly compressionEnabled?: boolean;\n}\n\nconst wrapIdentityProvider = <T>(base: IIdentityProvider<T>): IIdentityProvider<ICompressedTreeNode<T>> => ({\n\tgetId(node) {\n\t\treturn node.elements.map(e => base.getId(e).toString()).join('\\0');\n\t}\n});\n\n// Exported only for test reasons, do not use directly\nexport class CompressedObjectTreeModel<T extends NonNullable<any>, TFilterData extends NonNullable<any> = void> implements ITreeModel<ICompressedTreeNode<T> | null, TFilterData, T | null> {\n\n\treadonly rootRef = null;\n\n\tget onDidSpliceRenderedNodes(): Event<ITreeListSpliceData<ICompressedTreeNode<T> | null, TFilterData>> { return this.model.onDidSpliceRenderedNodes; }\n\tget onDidSpliceModel(): Event<ITreeModelSpliceEvent<ICompressedTreeNode<T> | null, TFilterData>> { return this.model.onDidSpliceModel; }\n\tget onDidChangeCollapseState(): Event<ICollapseStateChangeEvent<ICompressedTreeNode<T>, TFilterData>> { return this.model.onDidChangeCollapseState; }\n\tget onDidChangeRenderNodeCount(): Event<ITreeNode<ICompressedTreeNode<T>, TFilterData>> { return this.model.onDidChangeRenderNodeCount; }\n\n\tprivate model: ObjectTreeModel<ICompressedTreeNode<T>, TFilterData>;\n\tprivate nodes = new Map<T | null, ICompressedTreeNode<T>>();\n\tprivate enabled: boolean;\n\tprivate readonly identityProvider?: IIdentityProvider<ICompressedTreeNode<T>>;\n\n\tconstructor(\n\t\tprivate user: string,\n\t\toptions: ICompressedObjectTreeModelOptions<T, TFilterData> = {}\n\t) {\n\t\tthis.model = new ObjectTreeModel(user, options);\n\t\tthis.enabled = typeof options.compressionEnabled === 'undefined' ? true : options.compressionEnabled;\n\t\tthis.identityProvider = options.identityProvider;\n\t}\n\n\tsetChildren(\n\t\telement: T | null,\n\t\tchildren: Iterable<ICompressedTreeElement<T>> = Iterable.empty(),\n\t\toptions: IObjectTreeModelSetChildrenOptions<T, TFilterData>,\n\t): void {\n\t\t// Diffs must be deep, since the compression can affect nested elements.\n\t\t// @see https://github.com/microsoft/vscode/pull/114237#issuecomment-759425034\n\n\t\tconst diffIdentityProvider = options.diffIdentityProvider && wrapIdentityProvider(options.diffIdentityProvider);\n\t\tif (element === null) {\n\t\t\tconst compressedChildren = Iterable.map(children, this.enabled ? compress : noCompress);\n\t\t\tthis._setChildren(null, compressedChildren, { diffIdentityProvider, diffDepth: Infinity });\n\t\t\treturn;\n\t\t}\n\n\t\tconst compressedNode = this.nodes.get(element);\n\n\t\tif (!compressedNode) {\n\t\t\tthrow new TreeError(this.user, 'Unknown compressed tree node');\n\t\t}\n\n\t\tconst node = this.model.getNode(compressedNode) as ITreeNode<ICompressedTreeNode<T>, TFilterData>;\n\t\tconst compressedParentNode = this.model.getParentNodeLocation(compressedNode);\n\t\tconst parent = this.model.getNode(compressedParentNode) as ITreeNode<ICompressedTreeNode<T>, TFilterData>;\n\n\t\tconst decompressedElement = decompress(node);\n\t\tconst splicedElement = splice(decompressedElement, element, children);\n\t\tconst recompressedElement = (this.enabled ? compress : noCompress)(splicedElement);\n\n\t\t// If the recompressed node is identical to the original, just set its children.\n\t\t// Saves work and churn diffing the parent element.\n\t\tconst elementComparator = options.diffIdentityProvider\n\t\t\t? ((a: T, b: T) => options.diffIdentityProvider!.getId(a) === options.diffIdentityProvider!.getId(b))\n\t\t\t: undefined;\n\t\tif (equals(recompressedElement.element.elements, node.element.elements, elementComparator)) {\n\t\t\tthis._setChildren(compressedNode, recompressedElement.children || Iterable.empty(), { diffIdentityProvider, diffDepth: 1 });\n\t\t\treturn;\n\t\t}\n\n\t\tconst parentChildren = parent.children\n\t\t\t.map(child => child === node ? recompressedElement : child);\n\n\t\tthis._setChildren(parent.element, parentChildren, {\n\t\t\tdiffIdentityProvider,\n\t\t\tdiffDepth: node.depth - parent.depth,\n\t\t});\n\t}\n\n\tisCompressionEnabled(): boolean {\n\t\treturn this.enabled;\n\t}\n\n\tsetCompressionEnabled(enabled: boolean): void {\n\t\tif (enabled === this.enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.enabled = enabled;\n\n\t\tconst root = this.model.getNode();\n\t\tconst rootChildren = root.children as ITreeNode<ICompressedTreeNode<T>>[];\n\t\tconst decompressedRootChildren = Iterable.map(rootChildren, decompress);\n\t\tconst recompressedRootChildren = Iterable.map(decompressedRootChildren, enabled ? compress : noCompress);\n\n\t\t// it should be safe to always use deep diff mode here if an identity\n\t\t// provider is available, since we know the raw nodes are unchanged.\n\t\tthis._setChildren(null, recompressedRootChildren, {\n\t\t\tdiffIdentityProvider: this.identityProvider,\n\t\t\tdiffDepth: Infinity,\n\t\t});\n\t}\n\n\tprivate _setChildren(\n\t\tnode: ICompressedTreeNode<T> | null,\n\t\tchildren: Iterable<IObjectTreeElement<ICompressedTreeNode<T>>>,\n\t\toptions: IIndexTreeModelSpliceOptions<ICompressedTreeNode<T>, TFilterData>,\n\t): void {\n\t\tconst insertedElements = new Set<T | null>();\n\t\tconst onDidCreateNode = (node: ITreeNode<ICompressedTreeNode<T>, TFilterData>) => {\n\t\t\tfor (const element of node.element.elements) {\n\t\t\t\tinsertedElements.add(element);\n\t\t\t\tthis.nodes.set(element, node.element);\n\t\t\t}\n\t\t};\n\n\t\tconst onDidDeleteNode = (node: ITreeNode<ICompressedTreeNode<T>, TFilterData>) => {\n\t\t\tfor (const element of node.element.elements) {\n\t\t\t\tif (!insertedElements.has(element)) {\n\t\t\t\t\tthis.nodes.delete(element);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis.model.setChildren(node, children, { ...options, onDidCreateNode, onDidDeleteNode });\n\t}\n\n\thas(element: T | null): boolean {\n\t\treturn this.nodes.has(element);\n\t}\n\n\tgetListIndex(location: T | null): number {\n\t\tconst node = this.getCompressedNode(location);\n\t\treturn this.model.getListIndex(node);\n\t}\n\n\tgetListRenderCount(location: T | null): number {\n\t\tconst node = this.getCompressedNode(location);\n\t\treturn this.model.getListRenderCount(node);\n\t}\n\n\tgetNode(location?: T | null | undefined): ITreeNode<ICompressedTreeNode<T> | null, TFilterData> {\n\t\tif (typeof location === 'undefined') {\n\t\t\treturn this.model.getNode();\n\t\t}\n\n\t\tconst node = this.getCompressedNode(location);\n\t\treturn this.model.getNode(node);\n\t}\n\n\t// TODO: review this\n\tgetNodeLocation(node: ITreeNode<ICompressedTreeNode<T>, TFilterData>): T | null {\n\t\tconst compressedNode = this.model.getNodeLocation(node);\n\n\t\tif (compressedNode === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn compressedNode.elements[compressedNode.elements.length - 1];\n\t}\n\n\t// TODO: review this\n\tgetParentNodeLocation(location: T | null): T | null {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\tconst parentNode = this.model.getParentNodeLocation(compressedNode);\n\n\t\tif (parentNode === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn parentNode.elements[parentNode.elements.length - 1];\n\t}\n\n\tgetFirstElementChild(location: T | null): ICompressedTreeNode<T> | null | undefined {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.getFirstElementChild(compressedNode);\n\t}\n\n\tisCollapsible(location: T | null): boolean {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.isCollapsible(compressedNode);\n\t}\n\n\tsetCollapsible(location: T | null, collapsible?: boolean): boolean {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.setCollapsible(compressedNode, collapsible);\n\t}\n\n\tisCollapsed(location: T | null): boolean {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.isCollapsed(compressedNode);\n\t}\n\n\tsetCollapsed(location: T | null, collapsed?: boolean | undefined, recursive?: boolean | undefined): boolean {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\treturn this.model.setCollapsed(compressedNode, collapsed, recursive);\n\t}\n\n\texpandTo(location: T | null): void {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\tthis.model.expandTo(compressedNode);\n\t}\n\n\trerender(location: T | null): void {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\tthis.model.rerender(compressedNode);\n\t}\n\n\trefilter(): void {\n\t\tthis.model.refilter();\n\t}\n\n\tresort(location: T | null = null, recursive = true): void {\n\t\tconst compressedNode = this.getCompressedNode(location);\n\t\tthis.model.resort(compressedNode, recursive);\n\t}\n\n\tgetCompressedNode(element: T | null): ICompressedTreeNode<T> | null {\n\t\tif (element === null) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst node = this.nodes.get(element);\n\n\t\tif (!node) {\n\t\t\tthrow new TreeError(this.user, `Tree element not found: ${element}`);\n\t\t}\n\n\t\treturn node;\n\t}\n}\n\n// Compressible Object Tree\n\nexport type ElementMapper<T> = (elements: T[]) => T;\nexport const DefaultElementMapper: ElementMapper<any> = elements => elements[elements.length - 1];\n\nexport type CompressedNodeUnwrapper<T> = (node: ICompressedTreeNode<T>) => T;\ntype CompressedNodeWeakMapper<T, TFilterData> = WeakMapper<ITreeNode<ICompressedTreeNode<T> | null, TFilterData>, ITreeNode<T | null, TFilterData>>;\n\nclass CompressedTreeNodeWrapper<T, TFilterData> implements ITreeNode<T | null, TFilterData> {\n\n\tget element(): T | null { return this.node.element === null ? null : this.unwrapper(this.node.element); }\n\tget children(): ITreeNode<T | null, TFilterData>[] { return this.node.children.map(node => new CompressedTreeNodeWrapper(this.unwrapper, node)); }\n\tget depth(): number { return this.node.depth; }\n\tget visibleChildrenCount(): number { return this.node.visibleChildrenCount; }\n\tget visibleChildIndex(): number { return this.node.visibleChildIndex; }\n\tget collapsible(): boolean { return this.node.collapsible; }\n\tget collapsed(): boolean { return this.node.collapsed; }\n\tget visible(): boolean { return this.node.visible; }\n\tget filterData(): TFilterData | undefined { return this.node.filterData; }\n\n\tconstructor(\n\t\tprivate unwrapper: CompressedNodeUnwrapper<T>,\n\t\tprivate node: ITreeNode<ICompressedTreeNode<T> | null, TFilterData>\n\t) { }\n}\n\nfunction mapOptions<T, TFilterData>(compressedNodeUnwrapper: CompressedNodeUnwrapper<T>, options: ICompressibleObjectTreeModelOptions<T, TFilterData>): ICompressedObjectTreeModelOptions<T, TFilterData> {\n\treturn {\n\t\t...options,\n\t\tidentityProvider: options.identityProvider && {\n\t\t\tgetId(node: ICompressedTreeNode<T>): { toString(): string } {\n\t\t\t\treturn options.identityProvider!.getId(compressedNodeUnwrapper(node));\n\t\t\t}\n\t\t},\n\t\tsorter: options.sorter && {\n\t\t\tcompare(node: ICompressedTreeNode<T>, otherNode: ICompressedTreeNode<T>): number {\n\t\t\t\treturn options.sorter!.compare(node.elements[0], otherNode.elements[0]);\n\t\t\t}\n\t\t},\n\t\tfilter: options.filter && {\n\t\t\tfilter(node: ICompressedTreeNode<T>, parentVisibility: TreeVisibility): TreeFilterResult<TFilterData> {\n\t\t\t\tconst elements = node.elements;\n\t\t\t\tfor (let i = 0; i < elements.length - 1; i++) {\n\t\t\t\t\tconst result = options.filter!.filter(elements[i], parentVisibility);\n\t\t\t\t\tparentVisibility = getVisibleState(isFilterResult(result) ? result.visibility : result);\n\t\t\t\t}\n\t\t\t\treturn options.filter!.filter(elements[elements.length - 1], parentVisibility);\n\t\t\t}\n\t\t}\n\t};\n}\n\nexport interface ICompressibleObjectTreeModelOptions<T, TFilterData> extends IObjectTreeModelOptions<T, TFilterData> {\n\treadonly elementMapper?: ElementMapper<T>;\n}\n\nexport class CompressibleObjectTreeModel<T extends NonNullable<any>, TFilterData extends NonNullable<any> = void> implements IObjectTreeModel<T, TFilterData> {\n\n\treadonly rootRef = null;\n\n\tget onDidSpliceModel(): Event<ITreeModelSpliceEvent<T | null, TFilterData>> {\n\t\treturn Event.map(this.model.onDidSpliceModel, ({ insertedNodes, deletedNodes }) => ({\n\t\t\tinsertedNodes: insertedNodes.map(node => this.nodeMapper.map(node)),\n\t\t\tdeletedNodes: deletedNodes.map(node => this.nodeMapper.map(node)),\n\t\t}));\n\t}\n\n\tget onDidSpliceRenderedNodes(): Event<ITreeListSpliceData<T | null, TFilterData>> {\n\t\treturn Event.map(this.model.onDidSpliceRenderedNodes, ({ start, deleteCount, elements }) => ({\n\t\t\tstart,\n\t\t\tdeleteCount,\n\t\t\telements: elements.map(node => this.nodeMapper.map(node))\n\t\t}));\n\t}\n\n\tget onDidChangeCollapseState(): Event<ICollapseStateChangeEvent<T | null, TFilterData>> {\n\t\treturn Event.map(this.model.onDidChangeCollapseState, ({ node, deep }) => ({\n\t\t\tnode: this.nodeMapper.map(node),\n\t\t\tdeep\n\t\t}));\n\t}\n\n\tget onDidChangeRenderNodeCount(): Event<ITreeNode<T | null, TFilterData>> {\n\t\treturn Event.map(this.model.onDidChangeRenderNodeCount, node => this.nodeMapper.map(node));\n\t}\n\n\tprivate elementMapper: ElementMapper<T>;\n\tprivate nodeMapper: CompressedNodeWeakMapper<T, TFilterData>;\n\tprivate model: CompressedObjectTreeModel<T, TFilterData>;\n\n\tconstructor(\n\t\tuser: string,\n\t\toptions: ICompressibleObjectTreeModelOptions<T, TFilterData> = {}\n\t) {\n\t\tthis.elementMapper = options.elementMapper || DefaultElementMapper;\n\t\tconst compressedNodeUnwrapper: CompressedNodeUnwrapper<T> = node => this.elementMapper(node.elements);\n\t\tthis.nodeMapper = new WeakMapper(node => new CompressedTreeNodeWrapper(compressedNodeUnwrapper, node));\n\n\t\tthis.model = new CompressedObjectTreeModel(user, mapOptions(compressedNodeUnwrapper, options));\n\t}\n\n\tsetChildren(\n\t\telement: T | null,\n\t\tchildren: Iterable<ICompressedTreeElement<T>> = Iterable.empty(),\n\t\toptions: IObjectTreeModelSetChildrenOptions<T, TFilterData> = {},\n\t): void {\n\t\tthis.model.setChildren(element, children, options);\n\t}\n\n\tisCompressionEnabled(): boolean {\n\t\treturn this.model.isCompressionEnabled();\n\t}\n\n\tsetCompressionEnabled(enabled: boolean): void {\n\t\tthis.model.setCompressionEnabled(enabled);\n\t}\n\n\thas(location: T | null): boolean {\n\t\treturn this.model.has(location);\n\t}\n\n\tgetListIndex(location: T | null): number {\n\t\treturn this.model.getListIndex(location);\n\t}\n\n\tgetListRenderCount(location: T | null): number {\n\t\treturn this.model.getListRenderCount(location);\n\t}\n\n\tgetNode(location?: T | null | undefined): ITreeNode<T | null, any> {\n\t\treturn this.nodeMapper.map(this.model.getNode(location));\n\t}\n\n\tgetNodeLocation(node: ITreeNode<T | null, any>): T | null {\n\t\treturn node.element;\n\t}\n\n\tgetParentNodeLocation(location: T | null): T | null {\n\t\treturn this.model.getParentNodeLocation(location);\n\t}\n\n\tgetFirstElementChild(location: T | null): T | null | undefined {\n\t\tconst result = this.model.getFirstElementChild(location);\n\n\t\tif (result === null || typeof result === 'undefined') {\n\t\t\treturn result;\n\t\t}\n\n\t\treturn this.elementMapper(result.elements);\n\t}\n\n\tisCollapsible(location: T | null): boolean {\n\t\treturn this.model.isCollapsible(location);\n\t}\n\n\tsetCollapsible(location: T | null, collapsed?: boolean): boolean {\n\t\treturn this.model.setCollapsible(location, collapsed);\n\t}\n\n\tisCollapsed(location: T | null): boolean {\n\t\treturn this.model.isCollapsed(location);\n\t}\n\n\tsetCollapsed(location: T | null, collapsed?: boolean | undefined, recursive?: boolean | undefined): boolean {\n\t\treturn this.model.setCollapsed(location, collapsed, recursive);\n\t}\n\n\texpandTo(location: T | null): void {\n\t\treturn this.model.expandTo(location);\n\t}\n\n\trerender(location: T | null): void {\n\t\treturn this.model.rerender(location);\n\t}\n\n\trefilter(): void {\n\t\treturn this.model.refilter();\n\t}\n\n\tresort(element: T | null = null, recursive = true): void {\n\t\treturn this.model.resort(element, recursive);\n\t}\n\n\tgetCompressedTreeNode(location: T | null = null): ITreeNode<ICompressedTreeNode<T> | null, TFilterData> {\n\t\treturn this.model.getNode(location);\n\t}\n}\n"]}
@@ -29,6 +29,9 @@ export class ObjectTree extends AbstractTree {
29
29
  }
30
30
  this.model.rerender(element);
31
31
  }
32
+ resort(element, recursive = true) {
33
+ this.model.resort(element, recursive);
34
+ }
32
35
  hasElement(element) {
33
36
  return this.model.has(element);
34
37
  }