custom-electron-titlebar 3.2.6 → 3.2.10

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 (239) hide show
  1. package/.github/FUNDING.yml +1 -0
  2. package/README.md +15 -24
  3. package/_config.yml +1 -0
  4. package/{lib → build}/browser/browser.d.ts +0 -0
  5. package/{lib → build}/browser/browser.js +0 -0
  6. package/{lib → build}/browser/browser.js.map +0 -0
  7. package/{lib → build}/browser/event.d.ts +0 -0
  8. package/{lib → build}/browser/event.js +2 -1
  9. package/{lib → build}/browser/event.js.map +1 -1
  10. package/{lib → build}/browser/iframe.d.ts +0 -0
  11. package/{lib → build}/browser/iframe.js +0 -0
  12. package/{lib → build}/browser/iframe.js.map +0 -0
  13. package/{lib → build}/browser/keyboardEvent.d.ts +0 -0
  14. package/{lib → build}/browser/keyboardEvent.js +0 -0
  15. package/{lib → build}/browser/keyboardEvent.js.map +0 -0
  16. package/{lib → build}/browser/mouseEvent.d.ts +0 -0
  17. package/{lib → build}/browser/mouseEvent.js +0 -0
  18. package/{lib → build}/browser/mouseEvent.js.map +0 -0
  19. package/{lib → build}/common/arrays.d.ts +0 -0
  20. package/{lib → build}/common/arrays.js +0 -0
  21. package/{lib → build}/common/arrays.js.map +0 -0
  22. package/{lib → build}/common/async.d.ts +0 -0
  23. package/{lib → build}/common/async.js +0 -0
  24. package/{lib → build}/common/async.js.map +0 -0
  25. package/{lib → build}/common/charCode.d.ts +0 -0
  26. package/{lib → build}/common/charCode.js +0 -0
  27. package/{lib → build}/common/charCode.js.map +0 -0
  28. package/{lib → build}/common/color.d.ts +0 -0
  29. package/{lib → build}/common/color.js +0 -0
  30. package/{lib → build}/common/color.js.map +0 -0
  31. package/{lib → build}/common/dom.d.ts +0 -0
  32. package/{lib → build}/common/dom.js +16 -14
  33. package/build/common/dom.js.map +1 -0
  34. package/{lib → build}/common/event.d.ts +0 -0
  35. package/{lib → build}/common/event.js +1 -1
  36. package/build/common/event.js.map +1 -0
  37. package/{lib → build}/common/iterator.d.ts +0 -0
  38. package/{lib → build}/common/iterator.js +0 -0
  39. package/{lib → build}/common/iterator.js.map +0 -0
  40. package/{lib → build}/common/keyCodes.d.ts +0 -0
  41. package/{lib → build}/common/keyCodes.js +0 -0
  42. package/{lib → build}/common/keyCodes.js.map +0 -0
  43. package/{lib → build}/common/lifecycle.d.ts +0 -0
  44. package/{lib → build}/common/lifecycle.js +0 -0
  45. package/{lib → build}/common/lifecycle.js.map +0 -0
  46. package/{lib → build}/common/linkedList.d.ts +0 -0
  47. package/{lib → build}/common/linkedList.js +0 -0
  48. package/{lib → build}/common/linkedList.js.map +0 -0
  49. package/{lib → build}/common/platform.d.ts +0 -0
  50. package/{lib → build}/common/platform.js +0 -0
  51. package/{lib → build}/common/platform.js.map +0 -0
  52. package/{lib → build}/index.d.ts +0 -0
  53. package/{lib → build}/index.js +0 -0
  54. package/{lib → build}/index.js.map +0 -0
  55. package/{lib → build}/menu/menu.d.ts +0 -0
  56. package/{lib → build}/menu/menu.js +38 -38
  57. package/build/menu/menu.js.map +1 -0
  58. package/{lib → build}/menu/menuitem.d.ts +10 -2
  59. package/{lib → build}/menu/menuitem.js +70 -34
  60. package/build/menu/menuitem.js.map +1 -0
  61. package/{lib → build}/menubar.d.ts +0 -0
  62. package/{lib → build}/menubar.js +29 -30
  63. package/build/menubar.js.map +1 -0
  64. package/{lib → build}/themebar.d.ts +0 -0
  65. package/{lib → build}/themebar.js +2 -2
  66. package/build/themebar.js.map +1 -0
  67. package/{lib → build}/titlebar.d.ts +0 -0
  68. package/{lib → build}/titlebar.js +61 -58
  69. package/build/titlebar.js.map +1 -0
  70. package/package.json +13 -7
  71. package/lib/common/dom.js.map +0 -1
  72. package/lib/common/enableNativeMenuCommands.d.ts +0 -1
  73. package/lib/common/enableNativeMenuCommands.js +0 -32
  74. package/lib/common/enableNativeMenuCommands.js.map +0 -1
  75. package/lib/common/event.js.map +0 -1
  76. package/lib/main.d.ts +0 -1
  77. package/lib/main.js +0 -14
  78. package/lib/main.js.map +0 -1
  79. package/lib/menu/menu.js.map +0 -1
  80. package/lib/menu/menuitem.js.map +0 -1
  81. package/lib/menubar.js.map +0 -1
  82. package/lib/themebar.js.map +0 -1
  83. package/lib/titlebar.js.map +0 -1
  84. package/lib/vs/base/browser/browser.js +0 -150
  85. package/lib/vs/base/browser/canIUse.js +0 -58
  86. package/lib/vs/base/browser/codicons.js +0 -37
  87. package/lib/vs/base/browser/contextmenu.js +0 -9
  88. package/lib/vs/base/browser/dnd.js +0 -113
  89. package/lib/vs/base/browser/dom.js +0 -1417
  90. package/lib/vs/base/browser/event.js +0 -36
  91. package/lib/vs/base/browser/fastDomNode.js +0 -265
  92. package/lib/vs/base/browser/formattedTextRenderer.js +0 -248
  93. package/lib/vs/base/browser/globalMouseMoveMonitor.js +0 -137
  94. package/lib/vs/base/browser/history.js +0 -9
  95. package/lib/vs/base/browser/iframe.js +0 -126
  96. package/lib/vs/base/browser/keyboardEvent.js +0 -599
  97. package/lib/vs/base/browser/mouseEvent.js +0 -155
  98. package/lib/vs/base/browser/touch.js +0 -315
  99. package/lib/vs/base/browser/ui/actionbar/actionViewItems.js +0 -397
  100. package/lib/vs/base/browser/ui/actionbar/actionbar.js +0 -583
  101. package/lib/vs/base/browser/ui/checkbox/checkbox.js +0 -251
  102. package/lib/vs/base/browser/ui/codicons/codiconLabel.js +0 -31
  103. package/lib/vs/base/browser/ui/codicons/codiconStyles.js +0 -47
  104. package/lib/vs/base/browser/ui/contextview/contextview.js +0 -367
  105. package/lib/vs/base/browser/ui/dropdown/dropdown.js +0 -256
  106. package/lib/vs/base/browser/ui/dropdown/dropdownActionViewItem.js +0 -120
  107. package/lib/vs/base/browser/ui/keybindingLabel/keybindingLabel.js +0 -118
  108. package/lib/vs/base/browser/ui/list/list.js +0 -54
  109. package/lib/vs/base/browser/ui/list/listPaging.js +0 -322
  110. package/lib/vs/base/browser/ui/list/listView.js +0 -1388
  111. package/lib/vs/base/browser/ui/list/listWidget.js +0 -1709
  112. package/lib/vs/base/browser/ui/list/rangeMap.js +0 -223
  113. package/lib/vs/base/browser/ui/list/rowCache.js +0 -113
  114. package/lib/vs/base/browser/ui/list/splice.js +0 -23
  115. package/lib/vs/base/browser/ui/menu/menu.js +0 -1371
  116. package/lib/vs/base/browser/ui/menu/menubar.js +0 -1139
  117. package/lib/vs/base/browser/ui/scrollbar/abstractScrollbar.js +0 -278
  118. package/lib/vs/base/browser/ui/scrollbar/horizontalScrollbar.js +0 -115
  119. package/lib/vs/base/browser/ui/scrollbar/scrollableElement.js +0 -646
  120. package/lib/vs/base/browser/ui/scrollbar/scrollableElementOptions.js +0 -9
  121. package/lib/vs/base/browser/ui/scrollbar/scrollbarArrow.js +0 -106
  122. package/lib/vs/base/browser/ui/scrollbar/scrollbarState.js +0 -184
  123. package/lib/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.js +0 -116
  124. package/lib/vs/base/browser/ui/scrollbar/verticalScrollbar.js +0 -114
  125. package/lib/vs/base/browser/ui/selectBox/selectBox.js +0 -85
  126. package/lib/vs/base/browser/ui/selectBox/selectBoxCustom.js +0 -985
  127. package/lib/vs/base/browser/ui/selectBox/selectBoxNative.js +0 -188
  128. package/lib/vs/base/browser/ui/toolbar/toolbar.js +0 -206
  129. package/lib/vs/base/browser/ui/widget.js +0 -69
  130. package/lib/vs/base/common/actions.js +0 -224
  131. package/lib/vs/base/common/amd.js +0 -31
  132. package/lib/vs/base/common/arrays.js +0 -641
  133. package/lib/vs/base/common/assert.js +0 -21
  134. package/lib/vs/base/common/async.js +0 -966
  135. package/lib/vs/base/common/buffer.js +0 -250
  136. package/lib/vs/base/common/cache.js +0 -40
  137. package/lib/vs/base/common/cancellation.js +0 -146
  138. package/lib/vs/base/common/charCode.js +0 -9
  139. package/lib/vs/base/common/codicon.js +0 -136
  140. package/lib/vs/base/common/codicons.js +0 -1378
  141. package/lib/vs/base/common/collections.js +0 -133
  142. package/lib/vs/base/common/color.js +0 -716
  143. package/lib/vs/base/common/comparers.js +0 -280
  144. package/lib/vs/base/common/console.js +0 -142
  145. package/lib/vs/base/common/date.js +0 -113
  146. package/lib/vs/base/common/decorators.js +0 -169
  147. package/lib/vs/base/common/errorMessage.js +0 -93
  148. package/lib/vs/base/common/errors.js +0 -213
  149. package/lib/vs/base/common/errorsWithActions.js +0 -28
  150. package/lib/vs/base/common/event.js +0 -873
  151. package/lib/vs/base/common/extpath.js +0 -401
  152. package/lib/vs/base/common/filters.js +0 -948
  153. package/lib/vs/base/common/functional.js +0 -28
  154. package/lib/vs/base/common/fuzzyScorer.js +0 -811
  155. package/lib/vs/base/common/glob.js +0 -696
  156. package/lib/vs/base/common/hash.js +0 -359
  157. package/lib/vs/base/common/history.js +0 -116
  158. package/lib/vs/base/common/htmlContent.js +0 -162
  159. package/lib/vs/base/common/idGenerator.js +0 -25
  160. package/lib/vs/base/common/iterator.js +0 -118
  161. package/lib/vs/base/common/json.js +0 -1624
  162. package/lib/vs/base/common/jsonEdit.js +0 -272
  163. package/lib/vs/base/common/jsonErrorMessages.js +0 -69
  164. package/lib/vs/base/common/jsonFormatter.js +0 -316
  165. package/lib/vs/base/common/jsonSchema.js +0 -9
  166. package/lib/vs/base/common/keyCodes.js +0 -591
  167. package/lib/vs/base/common/keybindingLabels.js +0 -231
  168. package/lib/vs/base/common/keybindingParser.js +0 -142
  169. package/lib/vs/base/common/labels.js +0 -430
  170. package/lib/vs/base/common/lazy.js +0 -71
  171. package/lib/vs/base/common/lifecycle.js +0 -308
  172. package/lib/vs/base/common/linkedList.js +0 -152
  173. package/lib/vs/base/common/linkedText.js +0 -73
  174. package/lib/vs/base/common/map.js +0 -1108
  175. package/lib/vs/base/common/marshalling.js +0 -80
  176. package/lib/vs/base/common/mime.js +0 -321
  177. package/lib/vs/base/common/navigator.js +0 -50
  178. package/lib/vs/base/common/network.js +0 -160
  179. package/lib/vs/base/common/normalization.js +0 -78
  180. package/lib/vs/base/common/numbers.js +0 -55
  181. package/lib/vs/base/common/objects.js +0 -268
  182. package/lib/vs/base/common/paging.js +0 -190
  183. package/lib/vs/base/common/parsers.js +0 -78
  184. package/lib/vs/base/common/path.js +0 -1550
  185. package/lib/vs/base/common/platform.js +0 -245
  186. package/lib/vs/base/common/process.js +0 -52
  187. package/lib/vs/base/common/processes.js +0 -32
  188. package/lib/vs/base/common/range.js +0 -79
  189. package/lib/vs/base/common/resourceTree.js +0 -185
  190. package/lib/vs/base/common/resources.js +0 -421
  191. package/lib/vs/base/common/scanCode.js +0 -1472
  192. package/lib/vs/base/common/scrollable.js +0 -397
  193. package/lib/vs/base/common/search.js +0 -55
  194. package/lib/vs/base/common/sequence.js +0 -64
  195. package/lib/vs/base/common/severity.js +0 -55
  196. package/lib/vs/base/common/skipList.js +0 -234
  197. package/lib/vs/base/common/stopwatch.js +0 -45
  198. package/lib/vs/base/common/stream.js +0 -418
  199. package/lib/vs/base/common/strings.js +0 -1283
  200. package/lib/vs/base/common/styler.js +0 -9
  201. package/lib/vs/base/common/types.js +0 -296
  202. package/lib/vs/base/common/uint.js +0 -46
  203. package/lib/vs/base/common/uri.js +0 -756
  204. package/lib/vs/base/common/uriIpc.js +0 -154
  205. package/lib/vs/base/common/uuid.js +0 -70
  206. package/lib/vs/nls.mock.js +0 -31
  207. package/lib/vs/platform/actions/browser/menuEntryActionViewItem.js +0 -342
  208. package/lib/vs/platform/actions/common/actions.js +0 -456
  209. package/lib/vs/platform/actions/common/menuService.js +0 -194
  210. package/lib/vs/platform/clipboard/browser/clipboardService.js +0 -99
  211. package/lib/vs/platform/clipboard/common/clipboardService.js +0 -14
  212. package/lib/vs/platform/contextkey/common/contextkey.js +0 -1210
  213. package/lib/vs/platform/contextkey/common/contextkeys.js +0 -23
  214. package/lib/vs/platform/contextview/browser/contextView.js +0 -15
  215. package/lib/vs/platform/contextview/browser/contextViewService.js +0 -96
  216. package/lib/vs/platform/environment/common/argv.js +0 -9
  217. package/lib/vs/platform/environment/common/environment.js +0 -15
  218. package/lib/vs/platform/instantiation/common/descriptors.js +0 -25
  219. package/lib/vs/platform/instantiation/common/extensions.js +0 -26
  220. package/lib/vs/platform/instantiation/common/graph.js +0 -93
  221. package/lib/vs/platform/instantiation/common/instantiation.js +0 -84
  222. package/lib/vs/platform/instantiation/common/instantiationService.js +0 -361
  223. package/lib/vs/platform/instantiation/common/serviceCollection.js +0 -39
  224. package/lib/vs/platform/keybinding/common/baseResolvedKeybinding.js +0 -73
  225. package/lib/vs/platform/keybinding/common/keybinding.js +0 -14
  226. package/lib/vs/platform/keybinding/common/keybindingResolver.js +0 -391
  227. package/lib/vs/platform/keybinding/common/keybindingsRegistry.js +0 -229
  228. package/lib/vs/platform/keybinding/common/resolvedKeybindingItem.js +0 -47
  229. package/lib/vs/platform/keybinding/common/usLayoutResolvedKeybinding.js +0 -160
  230. package/lib/vs/platform/layout/browser/layoutService.js +0 -14
  231. package/lib/vs/platform/menubar/common/menubar.js +0 -34
  232. package/lib/vs/platform/registry/common/platform.js +0 -38
  233. package/lib/vs/platform/theme/browser/checkbox.js +0 -32
  234. package/lib/vs/platform/theme/common/colorRegistry.js +0 -1154
  235. package/lib/vs/platform/theme/common/styler.js +0 -290
  236. package/lib/vs/platform/theme/common/theme.js +0 -21
  237. package/lib/vs/platform/theme/common/themeService.js +0 -176
  238. package/lib/vs/platform/theme/common/tokenClassificationRegistry.js +0 -540
  239. package/lib/vs/platform/theme/test/common/testThemeService.js +0 -98
@@ -1,1388 +0,0 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Microsoft Corporation. All rights reserved.
4
- * Licensed under the MIT License. See License.txt in the project root for license information.
5
- *--------------------------------------------------------------------------------------------*/
6
-
7
- var __decorate = this && this.__decorate || function (decorators, target, key, desc) {
8
- var c = arguments.length,
9
- r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
10
- d;
11
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12
- return c > 3 && r && Object.defineProperty(target, key, r), r;
13
- };
14
-
15
- Object.defineProperty(exports, "__esModule", {
16
- value: true
17
- });
18
- exports.ListView = exports.NativeDragAndDropData = exports.ExternalElementsDragAndDropData = exports.ElementsDragAndDropData = void 0;
19
-
20
- const objects_1 = require("../../../common/objects");
21
-
22
- const lifecycle_1 = require("../../../common/lifecycle");
23
-
24
- const touch_1 = require("../../touch");
25
-
26
- const event_1 = require("../../../common/event");
27
-
28
- const event_2 = require("../../event");
29
-
30
- const scrollableElement_1 = require("../scrollbar/scrollableElement");
31
-
32
- const scrollable_1 = require("../../../common/scrollable");
33
-
34
- const rangeMap_1 = require("./rangeMap");
35
-
36
- const rowCache_1 = require("./rowCache");
37
-
38
- const decorators_1 = require("../../../common/decorators");
39
-
40
- const range_1 = require("../../../common/range");
41
-
42
- const arrays_1 = require("../../../common/arrays");
43
-
44
- const dnd_1 = require("../../dnd");
45
-
46
- const async_1 = require("../../../common/async");
47
-
48
- const browser_1 = require("../../browser");
49
-
50
- const dom_1 = require("../../dom");
51
-
52
- const DefaultOptions = {
53
- useShadows: true,
54
- verticalScrollMode: 1
55
- /* Auto */
56
- ,
57
- setRowLineHeight: true,
58
- setRowHeight: true,
59
- supportDynamicHeights: false,
60
- dnd: {
61
- getDragElements(e) {
62
- return [e];
63
- },
64
-
65
- getDragURI() {
66
- return null;
67
- },
68
-
69
- onDragStart() {},
70
-
71
- onDragOver() {
72
- return false;
73
- },
74
-
75
- drop() {}
76
-
77
- },
78
- horizontalScrolling: false,
79
- transformOptimization: true
80
- };
81
-
82
- class ElementsDragAndDropData {
83
- constructor(elements) {
84
- this.elements = elements;
85
- }
86
-
87
- get context() {
88
- return this._context;
89
- }
90
-
91
- set context(value) {
92
- this._context = value;
93
- }
94
-
95
- update() {}
96
-
97
- getData() {
98
- return this.elements;
99
- }
100
-
101
- }
102
-
103
- exports.ElementsDragAndDropData = ElementsDragAndDropData;
104
-
105
- class ExternalElementsDragAndDropData {
106
- constructor(elements) {
107
- this.elements = elements;
108
- }
109
-
110
- update() {}
111
-
112
- getData() {
113
- return this.elements;
114
- }
115
-
116
- }
117
-
118
- exports.ExternalElementsDragAndDropData = ExternalElementsDragAndDropData;
119
-
120
- class NativeDragAndDropData {
121
- constructor() {
122
- this.types = [];
123
- this.files = [];
124
- }
125
-
126
- update(dataTransfer) {
127
- if (dataTransfer.types) {
128
- this.types.splice(0, this.types.length, ...dataTransfer.types);
129
- }
130
-
131
- if (dataTransfer.files) {
132
- this.files.splice(0, this.files.length);
133
-
134
- for (let i = 0; i < dataTransfer.files.length; i++) {
135
- const file = dataTransfer.files.item(i);
136
-
137
- if (file && (file.size || file.type)) {
138
- this.files.push(file);
139
- }
140
- }
141
- }
142
- }
143
-
144
- getData() {
145
- return {
146
- types: this.types,
147
- files: this.files
148
- };
149
- }
150
-
151
- }
152
-
153
- exports.NativeDragAndDropData = NativeDragAndDropData;
154
-
155
- function equalsDragFeedback(f1, f2) {
156
- if (Array.isArray(f1) && Array.isArray(f2)) {
157
- return arrays_1.equals(f1, f2);
158
- }
159
-
160
- return f1 === f2;
161
- }
162
-
163
- class ListViewAccessibilityProvider {
164
- constructor(accessibilityProvider) {
165
- if (accessibilityProvider === null || accessibilityProvider === void 0 ? void 0 : accessibilityProvider.getSetSize) {
166
- this.getSetSize = accessibilityProvider.getSetSize.bind(accessibilityProvider);
167
- } else {
168
- this.getSetSize = (e, i, l) => l;
169
- }
170
-
171
- if (accessibilityProvider === null || accessibilityProvider === void 0 ? void 0 : accessibilityProvider.getPosInSet) {
172
- this.getPosInSet = accessibilityProvider.getPosInSet.bind(accessibilityProvider);
173
- } else {
174
- this.getPosInSet = (e, i) => i + 1;
175
- }
176
-
177
- if (accessibilityProvider === null || accessibilityProvider === void 0 ? void 0 : accessibilityProvider.getRole) {
178
- this.getRole = accessibilityProvider.getRole.bind(accessibilityProvider);
179
- } else {
180
- this.getRole = _ => 'listitem';
181
- }
182
-
183
- if (accessibilityProvider === null || accessibilityProvider === void 0 ? void 0 : accessibilityProvider.isChecked) {
184
- this.isChecked = accessibilityProvider.isChecked.bind(accessibilityProvider);
185
- } else {
186
- this.isChecked = _ => undefined;
187
- }
188
- }
189
-
190
- }
191
-
192
- class ListView {
193
- constructor(container, virtualDelegate, renderers, options = DefaultOptions) {
194
- this.virtualDelegate = virtualDelegate;
195
- this.domId = `list_id_${++ListView.InstanceCount}`;
196
- this.renderers = new Map();
197
- this.renderWidth = 0;
198
- this._scrollHeight = 0;
199
- this.scrollableElementUpdateDisposable = null;
200
- this.scrollableElementWidthDelayer = new async_1.Delayer(50);
201
- this.splicing = false;
202
- this.dragOverAnimationStopDisposable = lifecycle_1.Disposable.None;
203
- this.dragOverMouseY = 0;
204
- this.canDrop = false;
205
- this.currentDragFeedbackDisposable = lifecycle_1.Disposable.None;
206
- this.onDragLeaveTimeout = lifecycle_1.Disposable.None;
207
- this.disposables = new lifecycle_1.DisposableStore();
208
- this._onDidChangeContentHeight = new event_1.Emitter();
209
- this.onDidChangeContentHeight = event_1.Event.latch(this._onDidChangeContentHeight.event);
210
- this._horizontalScrolling = false;
211
-
212
- if (options.horizontalScrolling && options.supportDynamicHeights) {
213
- throw new Error('Horizontal scrolling and dynamic heights not supported simultaneously');
214
- }
215
-
216
- this.items = [];
217
- this.itemId = 0;
218
- this.rangeMap = new rangeMap_1.RangeMap();
219
-
220
- for (const renderer of renderers) {
221
- this.renderers.set(renderer.templateId, renderer);
222
- }
223
-
224
- this.cache = this.disposables.add(new rowCache_1.RowCache(this.renderers));
225
- this.lastRenderTop = 0;
226
- this.lastRenderHeight = 0;
227
- this.domNode = document.createElement('div');
228
- this.domNode.className = 'monaco-list';
229
- this.domNode.classList.add(this.domId);
230
- this.domNode.tabIndex = 0;
231
- this.domNode.classList.toggle('mouse-support', typeof options.mouseSupport === 'boolean' ? options.mouseSupport : true);
232
- this._horizontalScrolling = objects_1.getOrDefault(options, o => o.horizontalScrolling, DefaultOptions.horizontalScrolling);
233
- this.domNode.classList.toggle('horizontal-scrolling', this._horizontalScrolling);
234
- this.additionalScrollHeight = typeof options.additionalScrollHeight === 'undefined' ? 0 : options.additionalScrollHeight;
235
- this.accessibilityProvider = new ListViewAccessibilityProvider(options.accessibilityProvider);
236
- this.rowsContainer = document.createElement('div');
237
- this.rowsContainer.className = 'monaco-list-rows';
238
- const transformOptimization = objects_1.getOrDefault(options, o => o.transformOptimization, DefaultOptions.transformOptimization);
239
-
240
- if (transformOptimization) {
241
- this.rowsContainer.style.transform = 'translate3d(0px, 0px, 0px)';
242
- }
243
-
244
- this.disposables.add(touch_1.Gesture.addTarget(this.rowsContainer));
245
- this.scrollable = new scrollable_1.Scrollable(objects_1.getOrDefault(options, o => o.smoothScrolling, false) ? 125 : 0, cb => dom_1.scheduleAtNextAnimationFrame(cb));
246
- this.scrollableElement = this.disposables.add(new scrollableElement_1.SmoothScrollableElement(this.rowsContainer, {
247
- alwaysConsumeMouseWheel: true,
248
- horizontal: 1
249
- /* Auto */
250
- ,
251
- vertical: objects_1.getOrDefault(options, o => o.verticalScrollMode, DefaultOptions.verticalScrollMode),
252
- useShadows: objects_1.getOrDefault(options, o => o.useShadows, DefaultOptions.useShadows)
253
- }, this.scrollable));
254
- this.domNode.appendChild(this.scrollableElement.getDomNode());
255
- container.appendChild(this.domNode);
256
- this.scrollableElement.onScroll(this.onScroll, this, this.disposables);
257
- event_2.domEvent(this.rowsContainer, touch_1.EventType.Change)(this.onTouchChange, this, this.disposables); // Prevent the monaco-scrollable-element from scrolling
258
- // https://github.com/microsoft/vscode/issues/44181
259
-
260
- event_2.domEvent(this.scrollableElement.getDomNode(), 'scroll')(e => e.target.scrollTop = 0, null, this.disposables);
261
- event_1.Event.map(event_2.domEvent(this.domNode, 'dragover'), e => this.toDragEvent(e))(this.onDragOver, this, this.disposables);
262
- event_1.Event.map(event_2.domEvent(this.domNode, 'drop'), e => this.toDragEvent(e))(this.onDrop, this, this.disposables);
263
- event_2.domEvent(this.domNode, 'dragleave')(this.onDragLeave, this, this.disposables);
264
- event_2.domEvent(window, 'dragend')(this.onDragEnd, this, this.disposables);
265
- this.setRowLineHeight = objects_1.getOrDefault(options, o => o.setRowLineHeight, DefaultOptions.setRowLineHeight);
266
- this.setRowHeight = objects_1.getOrDefault(options, o => o.setRowHeight, DefaultOptions.setRowHeight);
267
- this.supportDynamicHeights = objects_1.getOrDefault(options, o => o.supportDynamicHeights, DefaultOptions.supportDynamicHeights);
268
- this.dnd = objects_1.getOrDefault(options, o => o.dnd, DefaultOptions.dnd);
269
- this.layout();
270
- }
271
-
272
- get contentHeight() {
273
- return this.rangeMap.size;
274
- }
275
-
276
- get onDidScroll() {
277
- return this.scrollableElement.onScroll;
278
- }
279
-
280
- get onWillScroll() {
281
- return this.scrollableElement.onWillScroll;
282
- }
283
-
284
- get containerDomNode() {
285
- return this.rowsContainer;
286
- }
287
-
288
- get horizontalScrolling() {
289
- return this._horizontalScrolling;
290
- }
291
-
292
- set horizontalScrolling(value) {
293
- if (value === this._horizontalScrolling) {
294
- return;
295
- }
296
-
297
- if (value && this.supportDynamicHeights) {
298
- throw new Error('Horizontal scrolling and dynamic heights not supported simultaneously');
299
- }
300
-
301
- this._horizontalScrolling = value;
302
- this.domNode.classList.toggle('horizontal-scrolling', this._horizontalScrolling);
303
-
304
- if (this._horizontalScrolling) {
305
- for (const item of this.items) {
306
- this.measureItemWidth(item);
307
- }
308
-
309
- this.updateScrollWidth();
310
- this.scrollableElement.setScrollDimensions({
311
- width: dom_1.getContentWidth(this.domNode)
312
- });
313
- this.rowsContainer.style.width = `${Math.max(this.scrollWidth || 0, this.renderWidth)}px`;
314
- } else {
315
- this.scrollableElementWidthDelayer.cancel();
316
- this.scrollableElement.setScrollDimensions({
317
- width: this.renderWidth,
318
- scrollWidth: this.renderWidth
319
- });
320
- this.rowsContainer.style.width = '';
321
- }
322
- }
323
-
324
- updateOptions(options) {
325
- if (options.additionalScrollHeight !== undefined) {
326
- this.additionalScrollHeight = options.additionalScrollHeight;
327
- }
328
-
329
- if (options.smoothScrolling !== undefined) {
330
- this.scrollable.setSmoothScrollDuration(options.smoothScrolling ? 125 : 0);
331
- }
332
-
333
- if (options.horizontalScrolling !== undefined) {
334
- this.horizontalScrolling = options.horizontalScrolling;
335
- }
336
- }
337
-
338
- triggerScrollFromMouseWheelEvent(browserEvent) {
339
- this.scrollableElement.triggerScrollFromMouseWheelEvent(browserEvent);
340
- }
341
-
342
- updateElementHeight(index, size, anchorIndex) {
343
- if (index < 0 || index >= this.items.length) {
344
- return;
345
- }
346
-
347
- if (this.items[index].size === size) {
348
- return;
349
- }
350
-
351
- const lastRenderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);
352
- let heightDiff = 0;
353
-
354
- if (index < lastRenderRange.start) {
355
- // do not scroll the viewport if resized element is out of viewport
356
- heightDiff = size - this.items[index].size;
357
- } else {
358
- if (anchorIndex !== null && anchorIndex > index && anchorIndex <= lastRenderRange.end) {
359
- // anchor in viewport
360
- // resized elemnet in viewport and above the anchor
361
- heightDiff = size - this.items[index].size;
362
- } else {
363
- heightDiff = 0;
364
- }
365
- }
366
-
367
- this.rangeMap.splice(index, 1, [{
368
- size: size
369
- }]);
370
- this.items[index].size = size;
371
- this.render(lastRenderRange, Math.max(0, this.lastRenderTop + heightDiff), this.lastRenderHeight, undefined, undefined, true);
372
- this.eventuallyUpdateScrollDimensions();
373
-
374
- if (this.supportDynamicHeights) {
375
- this._rerender(this.lastRenderTop, this.lastRenderHeight);
376
- }
377
- }
378
-
379
- splice(start, deleteCount, elements = []) {
380
- if (this.splicing) {
381
- throw new Error('Can\'t run recursive splices.');
382
- }
383
-
384
- this.splicing = true;
385
-
386
- try {
387
- return this._splice(start, deleteCount, elements);
388
- } finally {
389
- this.splicing = false;
390
-
391
- this._onDidChangeContentHeight.fire(this.contentHeight);
392
- }
393
- }
394
-
395
- _splice(start, deleteCount, elements = []) {
396
- const previousRenderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);
397
- const deleteRange = {
398
- start,
399
- end: start + deleteCount
400
- };
401
- const removeRange = range_1.Range.intersect(previousRenderRange, deleteRange);
402
-
403
- for (let i = removeRange.start; i < removeRange.end; i++) {
404
- this.removeItemFromDOM(i);
405
- }
406
-
407
- const previousRestRange = {
408
- start: start + deleteCount,
409
- end: this.items.length
410
- };
411
- const previousRenderedRestRange = range_1.Range.intersect(previousRestRange, previousRenderRange);
412
- const previousUnrenderedRestRanges = range_1.Range.relativeComplement(previousRestRange, previousRenderRange);
413
- const inserted = elements.map(element => ({
414
- id: String(this.itemId++),
415
- element,
416
- templateId: this.virtualDelegate.getTemplateId(element),
417
- size: this.virtualDelegate.getHeight(element),
418
- width: undefined,
419
- hasDynamicHeight: !!this.virtualDelegate.hasDynamicHeight && this.virtualDelegate.hasDynamicHeight(element),
420
- lastDynamicHeightWidth: undefined,
421
- row: null,
422
- uri: undefined,
423
- dropTarget: false,
424
- dragStartDisposable: lifecycle_1.Disposable.None
425
- }));
426
- let deleted; // TODO@joao: improve this optimization to catch even more cases
427
-
428
- if (start === 0 && deleteCount >= this.items.length) {
429
- this.rangeMap = new rangeMap_1.RangeMap();
430
- this.rangeMap.splice(0, 0, inserted);
431
- this.items = inserted;
432
- deleted = [];
433
- } else {
434
- this.rangeMap.splice(start, deleteCount, inserted);
435
- deleted = this.items.splice(start, deleteCount, ...inserted);
436
- }
437
-
438
- const delta = elements.length - deleteCount;
439
- const renderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);
440
- const renderedRestRange = rangeMap_1.shift(previousRenderedRestRange, delta);
441
- const updateRange = range_1.Range.intersect(renderRange, renderedRestRange);
442
-
443
- for (let i = updateRange.start; i < updateRange.end; i++) {
444
- this.updateItemInDOM(this.items[i], i);
445
- }
446
-
447
- const removeRanges = range_1.Range.relativeComplement(renderedRestRange, renderRange);
448
-
449
- for (const range of removeRanges) {
450
- for (let i = range.start; i < range.end; i++) {
451
- this.removeItemFromDOM(i);
452
- }
453
- }
454
-
455
- const unrenderedRestRanges = previousUnrenderedRestRanges.map(r => rangeMap_1.shift(r, delta));
456
- const elementsRange = {
457
- start,
458
- end: start + elements.length
459
- };
460
- const insertRanges = [elementsRange, ...unrenderedRestRanges].map(r => range_1.Range.intersect(renderRange, r));
461
- const beforeElement = this.getNextToLastElement(insertRanges);
462
-
463
- for (const range of insertRanges) {
464
- for (let i = range.start; i < range.end; i++) {
465
- this.insertItemInDOM(i, beforeElement);
466
- }
467
- }
468
-
469
- this.eventuallyUpdateScrollDimensions();
470
-
471
- if (this.supportDynamicHeights) {
472
- this._rerender(this.scrollTop, this.renderHeight);
473
- }
474
-
475
- return deleted.map(i => i.element);
476
- }
477
-
478
- eventuallyUpdateScrollDimensions() {
479
- this._scrollHeight = this.contentHeight;
480
- this.rowsContainer.style.height = `${this._scrollHeight}px`;
481
-
482
- if (!this.scrollableElementUpdateDisposable) {
483
- this.scrollableElementUpdateDisposable = dom_1.scheduleAtNextAnimationFrame(() => {
484
- this.scrollableElement.setScrollDimensions({
485
- scrollHeight: this.scrollHeight
486
- });
487
- this.updateScrollWidth();
488
- this.scrollableElementUpdateDisposable = null;
489
- });
490
- }
491
- }
492
-
493
- eventuallyUpdateScrollWidth() {
494
- if (!this.horizontalScrolling) {
495
- this.scrollableElementWidthDelayer.cancel();
496
- return;
497
- }
498
-
499
- this.scrollableElementWidthDelayer.trigger(() => this.updateScrollWidth());
500
- }
501
-
502
- updateScrollWidth() {
503
- if (!this.horizontalScrolling) {
504
- return;
505
- }
506
-
507
- let scrollWidth = 0;
508
-
509
- for (const item of this.items) {
510
- if (typeof item.width !== 'undefined') {
511
- scrollWidth = Math.max(scrollWidth, item.width);
512
- }
513
- }
514
-
515
- this.scrollWidth = scrollWidth;
516
- this.scrollableElement.setScrollDimensions({
517
- scrollWidth: scrollWidth === 0 ? 0 : scrollWidth + 10
518
- });
519
- }
520
-
521
- updateWidth(index) {
522
- if (!this.horizontalScrolling || typeof this.scrollWidth === 'undefined') {
523
- return;
524
- }
525
-
526
- const item = this.items[index];
527
- this.measureItemWidth(item);
528
-
529
- if (typeof item.width !== 'undefined' && item.width > this.scrollWidth) {
530
- this.scrollWidth = item.width;
531
- this.scrollableElement.setScrollDimensions({
532
- scrollWidth: this.scrollWidth + 10
533
- });
534
- }
535
- }
536
-
537
- rerender() {
538
- if (!this.supportDynamicHeights) {
539
- return;
540
- }
541
-
542
- for (const item of this.items) {
543
- item.lastDynamicHeightWidth = undefined;
544
- }
545
-
546
- this._rerender(this.lastRenderTop, this.lastRenderHeight);
547
- }
548
-
549
- get length() {
550
- return this.items.length;
551
- }
552
-
553
- get renderHeight() {
554
- const scrollDimensions = this.scrollableElement.getScrollDimensions();
555
- return scrollDimensions.height;
556
- }
557
-
558
- get firstVisibleIndex() {
559
- const range = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);
560
- const firstElTop = this.rangeMap.positionAt(range.start);
561
- const nextElTop = this.rangeMap.positionAt(range.start + 1);
562
-
563
- if (nextElTop !== -1) {
564
- const firstElMidpoint = (nextElTop - firstElTop) / 2 + firstElTop;
565
-
566
- if (firstElMidpoint < this.scrollTop) {
567
- return range.start + 1;
568
- }
569
- }
570
-
571
- return range.start;
572
- }
573
-
574
- get lastVisibleIndex() {
575
- const range = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);
576
- return range.end - 1;
577
- }
578
-
579
- element(index) {
580
- return this.items[index].element;
581
- }
582
-
583
- indexOf(element) {
584
- return this.items.findIndex(item => item.element === element);
585
- }
586
-
587
- domElement(index) {
588
- const row = this.items[index].row;
589
- return row && row.domNode;
590
- }
591
-
592
- elementHeight(index) {
593
- return this.items[index].size;
594
- }
595
-
596
- elementTop(index) {
597
- return this.rangeMap.positionAt(index);
598
- }
599
-
600
- indexAt(position) {
601
- return this.rangeMap.indexAt(position);
602
- }
603
-
604
- indexAfter(position) {
605
- return this.rangeMap.indexAfter(position);
606
- }
607
-
608
- layout(height, width) {
609
- let scrollDimensions = {
610
- height: typeof height === 'number' ? height : dom_1.getContentHeight(this.domNode)
611
- };
612
-
613
- if (this.scrollableElementUpdateDisposable) {
614
- this.scrollableElementUpdateDisposable.dispose();
615
- this.scrollableElementUpdateDisposable = null;
616
- scrollDimensions.scrollHeight = this.scrollHeight;
617
- }
618
-
619
- this.scrollableElement.setScrollDimensions(scrollDimensions);
620
-
621
- if (typeof width !== 'undefined') {
622
- this.renderWidth = width;
623
-
624
- if (this.supportDynamicHeights) {
625
- this._rerender(this.scrollTop, this.renderHeight);
626
- }
627
-
628
- if (this.horizontalScrolling) {
629
- this.scrollableElement.setScrollDimensions({
630
- width: typeof width === 'number' ? width : dom_1.getContentWidth(this.domNode)
631
- });
632
- }
633
- }
634
- } // Render
635
-
636
-
637
- render(previousRenderRange, renderTop, renderHeight, renderLeft, scrollWidth, updateItemsInDOM = false) {
638
- const renderRange = this.getRenderRange(renderTop, renderHeight);
639
- const rangesToInsert = range_1.Range.relativeComplement(renderRange, previousRenderRange);
640
- const rangesToRemove = range_1.Range.relativeComplement(previousRenderRange, renderRange);
641
- const beforeElement = this.getNextToLastElement(rangesToInsert);
642
-
643
- if (updateItemsInDOM) {
644
- const rangesToUpdate = range_1.Range.intersect(previousRenderRange, renderRange);
645
-
646
- for (let i = rangesToUpdate.start; i < rangesToUpdate.end; i++) {
647
- this.updateItemInDOM(this.items[i], i);
648
- }
649
- }
650
-
651
- for (const range of rangesToInsert) {
652
- for (let i = range.start; i < range.end; i++) {
653
- this.insertItemInDOM(i, beforeElement);
654
- }
655
- }
656
-
657
- for (const range of rangesToRemove) {
658
- for (let i = range.start; i < range.end; i++) {
659
- this.removeItemFromDOM(i);
660
- }
661
- }
662
-
663
- if (renderLeft !== undefined) {
664
- this.rowsContainer.style.left = `-${renderLeft}px`;
665
- }
666
-
667
- this.rowsContainer.style.top = `-${renderTop}px`;
668
-
669
- if (this.horizontalScrolling && scrollWidth !== undefined) {
670
- this.rowsContainer.style.width = `${Math.max(scrollWidth, this.renderWidth)}px`;
671
- }
672
-
673
- this.lastRenderTop = renderTop;
674
- this.lastRenderHeight = renderHeight;
675
- } // DOM operations
676
-
677
-
678
- insertItemInDOM(index, beforeElement) {
679
- const item = this.items[index];
680
-
681
- if (!item.row) {
682
- item.row = this.cache.alloc(item.templateId);
683
- const role = this.accessibilityProvider.getRole(item.element) || 'listitem';
684
- item.row.domNode.setAttribute('role', role);
685
- const checked = this.accessibilityProvider.isChecked(item.element);
686
-
687
- if (typeof checked !== 'undefined') {
688
- item.row.domNode.setAttribute('aria-checked', String(!!checked));
689
- }
690
- }
691
-
692
- if (!item.row.domNode.parentElement) {
693
- if (beforeElement) {
694
- this.rowsContainer.insertBefore(item.row.domNode, beforeElement);
695
- } else {
696
- this.rowsContainer.appendChild(item.row.domNode);
697
- }
698
- }
699
-
700
- this.updateItemInDOM(item, index);
701
- const renderer = this.renderers.get(item.templateId);
702
-
703
- if (!renderer) {
704
- throw new Error(`No renderer found for template id ${item.templateId}`);
705
- }
706
-
707
- if (renderer) {
708
- renderer.renderElement(item.element, index, item.row.templateData, item.size);
709
- }
710
-
711
- const uri = this.dnd.getDragURI(item.element);
712
- item.dragStartDisposable.dispose();
713
- item.row.domNode.draggable = !!uri;
714
-
715
- if (uri) {
716
- const onDragStart = event_2.domEvent(item.row.domNode, 'dragstart');
717
- item.dragStartDisposable = onDragStart(event => this.onDragStart(item.element, uri, event));
718
- }
719
-
720
- if (this.horizontalScrolling) {
721
- this.measureItemWidth(item);
722
- this.eventuallyUpdateScrollWidth();
723
- }
724
- }
725
-
726
- measureItemWidth(item) {
727
- if (!item.row || !item.row.domNode) {
728
- return;
729
- }
730
-
731
- item.row.domNode.style.width = browser_1.isFirefox ? '-moz-fit-content' : 'fit-content';
732
- item.width = dom_1.getContentWidth(item.row.domNode);
733
- const style = window.getComputedStyle(item.row.domNode);
734
-
735
- if (style.paddingLeft) {
736
- item.width += parseFloat(style.paddingLeft);
737
- }
738
-
739
- if (style.paddingRight) {
740
- item.width += parseFloat(style.paddingRight);
741
- }
742
-
743
- item.row.domNode.style.width = '';
744
- }
745
-
746
- updateItemInDOM(item, index) {
747
- item.row.domNode.style.top = `${this.elementTop(index)}px`;
748
-
749
- if (this.setRowHeight) {
750
- item.row.domNode.style.height = `${item.size}px`;
751
- }
752
-
753
- if (this.setRowLineHeight) {
754
- item.row.domNode.style.lineHeight = `${item.size}px`;
755
- }
756
-
757
- item.row.domNode.setAttribute('data-index', `${index}`);
758
- item.row.domNode.setAttribute('data-last-element', index === this.length - 1 ? 'true' : 'false');
759
- item.row.domNode.setAttribute('aria-setsize', String(this.accessibilityProvider.getSetSize(item.element, index, this.length)));
760
- item.row.domNode.setAttribute('aria-posinset', String(this.accessibilityProvider.getPosInSet(item.element, index)));
761
- item.row.domNode.setAttribute('id', this.getElementDomId(index));
762
- item.row.domNode.classList.toggle('drop-target', item.dropTarget);
763
- }
764
-
765
- removeItemFromDOM(index) {
766
- const item = this.items[index];
767
- item.dragStartDisposable.dispose();
768
- const renderer = this.renderers.get(item.templateId);
769
-
770
- if (item.row && renderer && renderer.disposeElement) {
771
- renderer.disposeElement(item.element, index, item.row.templateData, item.size);
772
- }
773
-
774
- this.cache.release(item.row);
775
- item.row = null;
776
-
777
- if (this.horizontalScrolling) {
778
- this.eventuallyUpdateScrollWidth();
779
- }
780
- }
781
-
782
- getScrollTop() {
783
- const scrollPosition = this.scrollableElement.getScrollPosition();
784
- return scrollPosition.scrollTop;
785
- }
786
-
787
- setScrollTop(scrollTop) {
788
- if (this.scrollableElementUpdateDisposable) {
789
- this.scrollableElementUpdateDisposable.dispose();
790
- this.scrollableElementUpdateDisposable = null;
791
- this.scrollableElement.setScrollDimensions({
792
- scrollHeight: this.scrollHeight
793
- });
794
- }
795
-
796
- this.scrollableElement.setScrollPosition({
797
- scrollTop
798
- });
799
- }
800
-
801
- getScrollLeft() {
802
- const scrollPosition = this.scrollableElement.getScrollPosition();
803
- return scrollPosition.scrollLeft;
804
- }
805
-
806
- setScrollLeft(scrollLeft) {
807
- if (this.scrollableElementUpdateDisposable) {
808
- this.scrollableElementUpdateDisposable.dispose();
809
- this.scrollableElementUpdateDisposable = null;
810
- this.scrollableElement.setScrollDimensions({
811
- scrollWidth: this.scrollWidth
812
- });
813
- }
814
-
815
- this.scrollableElement.setScrollPosition({
816
- scrollLeft
817
- });
818
- }
819
-
820
- get scrollTop() {
821
- return this.getScrollTop();
822
- }
823
-
824
- set scrollTop(scrollTop) {
825
- this.setScrollTop(scrollTop);
826
- }
827
-
828
- get scrollHeight() {
829
- return this._scrollHeight + (this.horizontalScrolling ? 10 : 0) + this.additionalScrollHeight;
830
- } // Events
831
-
832
-
833
- get onMouseClick() {
834
- return event_1.Event.map(event_2.domEvent(this.domNode, 'click'), e => this.toMouseEvent(e));
835
- }
836
-
837
- get onMouseDblClick() {
838
- return event_1.Event.map(event_2.domEvent(this.domNode, 'dblclick'), e => this.toMouseEvent(e));
839
- }
840
-
841
- get onMouseMiddleClick() {
842
- return event_1.Event.filter(event_1.Event.map(event_2.domEvent(this.domNode, 'auxclick'), e => this.toMouseEvent(e)), e => e.browserEvent.button === 1);
843
- }
844
-
845
- get onMouseUp() {
846
- return event_1.Event.map(event_2.domEvent(this.domNode, 'mouseup'), e => this.toMouseEvent(e));
847
- }
848
-
849
- get onMouseDown() {
850
- return event_1.Event.map(event_2.domEvent(this.domNode, 'mousedown'), e => this.toMouseEvent(e));
851
- }
852
-
853
- get onMouseOver() {
854
- return event_1.Event.map(event_2.domEvent(this.domNode, 'mouseover'), e => this.toMouseEvent(e));
855
- }
856
-
857
- get onMouseMove() {
858
- return event_1.Event.map(event_2.domEvent(this.domNode, 'mousemove'), e => this.toMouseEvent(e));
859
- }
860
-
861
- get onMouseOut() {
862
- return event_1.Event.map(event_2.domEvent(this.domNode, 'mouseout'), e => this.toMouseEvent(e));
863
- }
864
-
865
- get onContextMenu() {
866
- return event_1.Event.map(event_2.domEvent(this.domNode, 'contextmenu'), e => this.toMouseEvent(e));
867
- }
868
-
869
- get onTouchStart() {
870
- return event_1.Event.map(event_2.domEvent(this.domNode, 'touchstart'), e => this.toTouchEvent(e));
871
- }
872
-
873
- get onTap() {
874
- return event_1.Event.map(event_2.domEvent(this.rowsContainer, touch_1.EventType.Tap), e => this.toGestureEvent(e));
875
- }
876
-
877
- toMouseEvent(browserEvent) {
878
- const index = this.getItemIndexFromEventTarget(browserEvent.target || null);
879
- const item = typeof index === 'undefined' ? undefined : this.items[index];
880
- const element = item && item.element;
881
- return {
882
- browserEvent,
883
- index,
884
- element
885
- };
886
- }
887
-
888
- toTouchEvent(browserEvent) {
889
- const index = this.getItemIndexFromEventTarget(browserEvent.target || null);
890
- const item = typeof index === 'undefined' ? undefined : this.items[index];
891
- const element = item && item.element;
892
- return {
893
- browserEvent,
894
- index,
895
- element
896
- };
897
- }
898
-
899
- toGestureEvent(browserEvent) {
900
- const index = this.getItemIndexFromEventTarget(browserEvent.initialTarget || null);
901
- const item = typeof index === 'undefined' ? undefined : this.items[index];
902
- const element = item && item.element;
903
- return {
904
- browserEvent,
905
- index,
906
- element
907
- };
908
- }
909
-
910
- toDragEvent(browserEvent) {
911
- const index = this.getItemIndexFromEventTarget(browserEvent.target || null);
912
- const item = typeof index === 'undefined' ? undefined : this.items[index];
913
- const element = item && item.element;
914
- return {
915
- browserEvent,
916
- index,
917
- element
918
- };
919
- }
920
-
921
- onScroll(e) {
922
- try {
923
- const previousRenderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);
924
- this.render(previousRenderRange, e.scrollTop, e.height, e.scrollLeft, e.scrollWidth);
925
-
926
- if (this.supportDynamicHeights) {
927
- // Don't update scrollTop from within an scroll event
928
- // so we don't break smooth scrolling. #104144
929
- this._rerender(e.scrollTop, e.height, false);
930
- }
931
- } catch (err) {
932
- console.error('Got bad scroll event:', e);
933
- throw err;
934
- }
935
- }
936
-
937
- onTouchChange(event) {
938
- event.preventDefault();
939
- event.stopPropagation();
940
- this.scrollTop -= event.translationY;
941
- } // DND
942
-
943
-
944
- onDragStart(element, uri, event) {
945
- if (!event.dataTransfer) {
946
- return;
947
- }
948
-
949
- const elements = this.dnd.getDragElements(element);
950
- event.dataTransfer.effectAllowed = 'copyMove';
951
- event.dataTransfer.setData(dnd_1.DataTransfers.RESOURCES, JSON.stringify([uri]));
952
-
953
- if (event.dataTransfer.setDragImage) {
954
- let label;
955
-
956
- if (this.dnd.getDragLabel) {
957
- label = this.dnd.getDragLabel(elements, event);
958
- }
959
-
960
- if (typeof label === 'undefined') {
961
- label = String(elements.length);
962
- }
963
-
964
- const dragImage = dom_1.$('.monaco-drag-image');
965
- dragImage.textContent = label;
966
- document.body.appendChild(dragImage);
967
- event.dataTransfer.setDragImage(dragImage, -10, -10);
968
- setTimeout(() => document.body.removeChild(dragImage), 0);
969
- }
970
-
971
- this.currentDragData = new ElementsDragAndDropData(elements);
972
- dnd_1.StaticDND.CurrentDragAndDropData = new ExternalElementsDragAndDropData(elements);
973
-
974
- if (this.dnd.onDragStart) {
975
- this.dnd.onDragStart(this.currentDragData, event);
976
- }
977
- }
978
-
979
- onDragOver(event) {
980
- event.browserEvent.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)
981
-
982
- this.onDragLeaveTimeout.dispose();
983
-
984
- if (dnd_1.StaticDND.CurrentDragAndDropData && dnd_1.StaticDND.CurrentDragAndDropData.getData() === 'vscode-ui') {
985
- return false;
986
- }
987
-
988
- this.setupDragAndDropScrollTopAnimation(event.browserEvent);
989
-
990
- if (!event.browserEvent.dataTransfer) {
991
- return false;
992
- } // Drag over from outside
993
-
994
-
995
- if (!this.currentDragData) {
996
- if (dnd_1.StaticDND.CurrentDragAndDropData) {
997
- // Drag over from another list
998
- this.currentDragData = dnd_1.StaticDND.CurrentDragAndDropData;
999
- } else {
1000
- // Drag over from the desktop
1001
- if (!event.browserEvent.dataTransfer.types) {
1002
- return false;
1003
- }
1004
-
1005
- this.currentDragData = new NativeDragAndDropData();
1006
- }
1007
- }
1008
-
1009
- const result = this.dnd.onDragOver(this.currentDragData, event.element, event.index, event.browserEvent);
1010
- this.canDrop = typeof result === 'boolean' ? result : result.accept;
1011
-
1012
- if (!this.canDrop) {
1013
- this.currentDragFeedback = undefined;
1014
- this.currentDragFeedbackDisposable.dispose();
1015
- return false;
1016
- }
1017
-
1018
- event.browserEvent.dataTransfer.dropEffect = typeof result !== 'boolean' && result.effect === 0
1019
- /* Copy */
1020
- ? 'copy' : 'move';
1021
- let feedback;
1022
-
1023
- if (typeof result !== 'boolean' && result.feedback) {
1024
- feedback = result.feedback;
1025
- } else {
1026
- if (typeof event.index === 'undefined') {
1027
- feedback = [-1];
1028
- } else {
1029
- feedback = [event.index];
1030
- }
1031
- } // sanitize feedback list
1032
-
1033
-
1034
- feedback = arrays_1.distinct(feedback).filter(i => i >= -1 && i < this.length).sort((a, b) => a - b);
1035
- feedback = feedback[0] === -1 ? [-1] : feedback;
1036
-
1037
- if (equalsDragFeedback(this.currentDragFeedback, feedback)) {
1038
- return true;
1039
- }
1040
-
1041
- this.currentDragFeedback = feedback;
1042
- this.currentDragFeedbackDisposable.dispose();
1043
-
1044
- if (feedback[0] === -1) {
1045
- // entire list feedback
1046
- this.domNode.classList.add('drop-target');
1047
- this.rowsContainer.classList.add('drop-target');
1048
- this.currentDragFeedbackDisposable = lifecycle_1.toDisposable(() => {
1049
- this.domNode.classList.remove('drop-target');
1050
- this.rowsContainer.classList.remove('drop-target');
1051
- });
1052
- } else {
1053
- for (const index of feedback) {
1054
- const item = this.items[index];
1055
- item.dropTarget = true;
1056
-
1057
- if (item.row && item.row.domNode) {
1058
- item.row.domNode.classList.add('drop-target');
1059
- }
1060
- }
1061
-
1062
- this.currentDragFeedbackDisposable = lifecycle_1.toDisposable(() => {
1063
- for (const index of feedback) {
1064
- const item = this.items[index];
1065
- item.dropTarget = false;
1066
-
1067
- if (item.row && item.row.domNode) {
1068
- item.row.domNode.classList.remove('drop-target');
1069
- }
1070
- }
1071
- });
1072
- }
1073
-
1074
- return true;
1075
- }
1076
-
1077
- onDragLeave() {
1078
- this.onDragLeaveTimeout.dispose();
1079
- this.onDragLeaveTimeout = async_1.disposableTimeout(() => this.clearDragOverFeedback(), 100);
1080
- }
1081
-
1082
- onDrop(event) {
1083
- if (!this.canDrop) {
1084
- return;
1085
- }
1086
-
1087
- const dragData = this.currentDragData;
1088
- this.teardownDragAndDropScrollTopAnimation();
1089
- this.clearDragOverFeedback();
1090
- this.currentDragData = undefined;
1091
- dnd_1.StaticDND.CurrentDragAndDropData = undefined;
1092
-
1093
- if (!dragData || !event.browserEvent.dataTransfer) {
1094
- return;
1095
- }
1096
-
1097
- event.browserEvent.preventDefault();
1098
- dragData.update(event.browserEvent.dataTransfer);
1099
- this.dnd.drop(dragData, event.element, event.index, event.browserEvent);
1100
- }
1101
-
1102
- onDragEnd(event) {
1103
- this.canDrop = false;
1104
- this.teardownDragAndDropScrollTopAnimation();
1105
- this.clearDragOverFeedback();
1106
- this.currentDragData = undefined;
1107
- dnd_1.StaticDND.CurrentDragAndDropData = undefined;
1108
-
1109
- if (this.dnd.onDragEnd) {
1110
- this.dnd.onDragEnd(event);
1111
- }
1112
- }
1113
-
1114
- clearDragOverFeedback() {
1115
- this.currentDragFeedback = undefined;
1116
- this.currentDragFeedbackDisposable.dispose();
1117
- this.currentDragFeedbackDisposable = lifecycle_1.Disposable.None;
1118
- } // DND scroll top animation
1119
-
1120
-
1121
- setupDragAndDropScrollTopAnimation(event) {
1122
- if (!this.dragOverAnimationDisposable) {
1123
- const viewTop = dom_1.getTopLeftOffset(this.domNode).top;
1124
- this.dragOverAnimationDisposable = dom_1.animate(this.animateDragAndDropScrollTop.bind(this, viewTop));
1125
- }
1126
-
1127
- this.dragOverAnimationStopDisposable.dispose();
1128
- this.dragOverAnimationStopDisposable = async_1.disposableTimeout(() => {
1129
- if (this.dragOverAnimationDisposable) {
1130
- this.dragOverAnimationDisposable.dispose();
1131
- this.dragOverAnimationDisposable = undefined;
1132
- }
1133
- }, 1000);
1134
- this.dragOverMouseY = event.pageY;
1135
- }
1136
-
1137
- animateDragAndDropScrollTop(viewTop) {
1138
- if (this.dragOverMouseY === undefined) {
1139
- return;
1140
- }
1141
-
1142
- const diff = this.dragOverMouseY - viewTop;
1143
- const upperLimit = this.renderHeight - 35;
1144
-
1145
- if (diff < 35) {
1146
- this.scrollTop += Math.max(-14, Math.floor(0.3 * (diff - 35)));
1147
- } else if (diff > upperLimit) {
1148
- this.scrollTop += Math.min(14, Math.floor(0.3 * (diff - upperLimit)));
1149
- }
1150
- }
1151
-
1152
- teardownDragAndDropScrollTopAnimation() {
1153
- this.dragOverAnimationStopDisposable.dispose();
1154
-
1155
- if (this.dragOverAnimationDisposable) {
1156
- this.dragOverAnimationDisposable.dispose();
1157
- this.dragOverAnimationDisposable = undefined;
1158
- }
1159
- } // Util
1160
-
1161
-
1162
- getItemIndexFromEventTarget(target) {
1163
- const scrollableElement = this.scrollableElement.getDomNode();
1164
- let element = target;
1165
-
1166
- while (element instanceof HTMLElement && element !== this.rowsContainer && scrollableElement.contains(element)) {
1167
- const rawIndex = element.getAttribute('data-index');
1168
-
1169
- if (rawIndex) {
1170
- const index = Number(rawIndex);
1171
-
1172
- if (!isNaN(index)) {
1173
- return index;
1174
- }
1175
- }
1176
-
1177
- element = element.parentElement;
1178
- }
1179
-
1180
- return undefined;
1181
- }
1182
-
1183
- getRenderRange(renderTop, renderHeight) {
1184
- return {
1185
- start: this.rangeMap.indexAt(renderTop),
1186
- end: this.rangeMap.indexAfter(renderTop + renderHeight - 1)
1187
- };
1188
- }
1189
- /**
1190
- * Given a stable rendered state, checks every rendered element whether it needs
1191
- * to be probed for dynamic height. Adjusts scroll height and top if necessary.
1192
- */
1193
-
1194
-
1195
- _rerender(renderTop, renderHeight, updateScrollTop = true) {
1196
- const previousRenderRange = this.getRenderRange(renderTop, renderHeight); // Let's remember the second element's position, this helps in scrolling up
1197
- // and preserving a linear upwards scroll movement
1198
-
1199
- let anchorElementIndex;
1200
- let anchorElementTopDelta;
1201
-
1202
- if (renderTop === this.elementTop(previousRenderRange.start)) {
1203
- anchorElementIndex = previousRenderRange.start;
1204
- anchorElementTopDelta = 0;
1205
- } else if (previousRenderRange.end - previousRenderRange.start > 1) {
1206
- anchorElementIndex = previousRenderRange.start + 1;
1207
- anchorElementTopDelta = this.elementTop(anchorElementIndex) - renderTop;
1208
- }
1209
-
1210
- let heightDiff = 0;
1211
-
1212
- while (true) {
1213
- const renderRange = this.getRenderRange(renderTop, renderHeight);
1214
- let didChange = false;
1215
-
1216
- for (let i = renderRange.start; i < renderRange.end; i++) {
1217
- const diff = this.probeDynamicHeight(i);
1218
-
1219
- if (diff !== 0) {
1220
- this.rangeMap.splice(i, 1, [this.items[i]]);
1221
- }
1222
-
1223
- heightDiff += diff;
1224
- didChange = didChange || diff !== 0;
1225
- }
1226
-
1227
- if (!didChange) {
1228
- if (heightDiff !== 0) {
1229
- this.eventuallyUpdateScrollDimensions();
1230
- }
1231
-
1232
- const unrenderRanges = range_1.Range.relativeComplement(previousRenderRange, renderRange);
1233
-
1234
- for (const range of unrenderRanges) {
1235
- for (let i = range.start; i < range.end; i++) {
1236
- if (this.items[i].row) {
1237
- this.removeItemFromDOM(i);
1238
- }
1239
- }
1240
- }
1241
-
1242
- const renderRanges = range_1.Range.relativeComplement(renderRange, previousRenderRange);
1243
-
1244
- for (const range of renderRanges) {
1245
- for (let i = range.start; i < range.end; i++) {
1246
- const afterIndex = i + 1;
1247
- const beforeRow = afterIndex < this.items.length ? this.items[afterIndex].row : null;
1248
- const beforeElement = beforeRow ? beforeRow.domNode : null;
1249
- this.insertItemInDOM(i, beforeElement);
1250
- }
1251
- }
1252
-
1253
- for (let i = renderRange.start; i < renderRange.end; i++) {
1254
- if (this.items[i].row) {
1255
- this.updateItemInDOM(this.items[i], i);
1256
- }
1257
- }
1258
-
1259
- if (updateScrollTop && typeof anchorElementIndex === 'number') {
1260
- this.scrollTop = this.elementTop(anchorElementIndex) - anchorElementTopDelta;
1261
- }
1262
-
1263
- this._onDidChangeContentHeight.fire(this.contentHeight);
1264
-
1265
- return;
1266
- }
1267
- }
1268
- }
1269
-
1270
- probeDynamicHeight(index) {
1271
- const item = this.items[index];
1272
-
1273
- if (!item.hasDynamicHeight || item.lastDynamicHeightWidth === this.renderWidth) {
1274
- return 0;
1275
- }
1276
-
1277
- if (!!this.virtualDelegate.hasDynamicHeight && !this.virtualDelegate.hasDynamicHeight(item.element)) {
1278
- return 0;
1279
- }
1280
-
1281
- const size = item.size;
1282
-
1283
- if (!this.setRowHeight && item.row && item.row.domNode) {
1284
- let newSize = item.row.domNode.offsetHeight;
1285
- item.size = newSize;
1286
- item.lastDynamicHeightWidth = this.renderWidth;
1287
- return newSize - size;
1288
- }
1289
-
1290
- const row = this.cache.alloc(item.templateId);
1291
- row.domNode.style.height = '';
1292
- this.rowsContainer.appendChild(row.domNode);
1293
- const renderer = this.renderers.get(item.templateId);
1294
-
1295
- if (renderer) {
1296
- renderer.renderElement(item.element, index, row.templateData, undefined);
1297
-
1298
- if (renderer.disposeElement) {
1299
- renderer.disposeElement(item.element, index, row.templateData, undefined);
1300
- }
1301
- }
1302
-
1303
- item.size = row.domNode.offsetHeight;
1304
-
1305
- if (this.virtualDelegate.setDynamicHeight) {
1306
- this.virtualDelegate.setDynamicHeight(item.element, item.size);
1307
- }
1308
-
1309
- item.lastDynamicHeightWidth = this.renderWidth;
1310
- this.rowsContainer.removeChild(row.domNode);
1311
- this.cache.release(row);
1312
- return item.size - size;
1313
- }
1314
-
1315
- getNextToLastElement(ranges) {
1316
- const lastRange = ranges[ranges.length - 1];
1317
-
1318
- if (!lastRange) {
1319
- return null;
1320
- }
1321
-
1322
- const nextToLastItem = this.items[lastRange.end];
1323
-
1324
- if (!nextToLastItem) {
1325
- return null;
1326
- }
1327
-
1328
- if (!nextToLastItem.row) {
1329
- return null;
1330
- }
1331
-
1332
- return nextToLastItem.row.domNode;
1333
- }
1334
-
1335
- getElementDomId(index) {
1336
- return `${this.domId}_${index}`;
1337
- } // Dispose
1338
-
1339
-
1340
- dispose() {
1341
- if (this.items) {
1342
- for (const item of this.items) {
1343
- if (item.row) {
1344
- const renderer = this.renderers.get(item.row.templateId);
1345
-
1346
- if (renderer) {
1347
- renderer.disposeTemplate(item.row.templateData);
1348
- }
1349
- }
1350
- }
1351
-
1352
- this.items = [];
1353
- }
1354
-
1355
- if (this.domNode && this.domNode.parentNode) {
1356
- this.domNode.parentNode.removeChild(this.domNode);
1357
- }
1358
-
1359
- lifecycle_1.dispose(this.disposables);
1360
- }
1361
-
1362
- }
1363
-
1364
- ListView.InstanceCount = 0;
1365
-
1366
- __decorate([decorators_1.memoize], ListView.prototype, "onMouseClick", null);
1367
-
1368
- __decorate([decorators_1.memoize], ListView.prototype, "onMouseDblClick", null);
1369
-
1370
- __decorate([decorators_1.memoize], ListView.prototype, "onMouseMiddleClick", null);
1371
-
1372
- __decorate([decorators_1.memoize], ListView.prototype, "onMouseUp", null);
1373
-
1374
- __decorate([decorators_1.memoize], ListView.prototype, "onMouseDown", null);
1375
-
1376
- __decorate([decorators_1.memoize], ListView.prototype, "onMouseOver", null);
1377
-
1378
- __decorate([decorators_1.memoize], ListView.prototype, "onMouseMove", null);
1379
-
1380
- __decorate([decorators_1.memoize], ListView.prototype, "onMouseOut", null);
1381
-
1382
- __decorate([decorators_1.memoize], ListView.prototype, "onContextMenu", null);
1383
-
1384
- __decorate([decorators_1.memoize], ListView.prototype, "onTouchStart", null);
1385
-
1386
- __decorate([decorators_1.memoize], ListView.prototype, "onTap", null);
1387
-
1388
- exports.ListView = ListView;