@xterm/xterm 6.1.0-beta.28 → 6.1.0-beta.281

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 (181) hide show
  1. package/README.md +62 -38
  2. package/css/xterm.css +29 -22
  3. package/lib/xterm.js +1 -1
  4. package/lib/xterm.js.map +1 -1
  5. package/lib/xterm.mjs +8 -34
  6. package/lib/xterm.mjs.map +4 -4
  7. package/package.json +56 -45
  8. package/src/browser/AccessibilityManager.ts +18 -13
  9. package/src/browser/Clipboard.ts +8 -5
  10. package/src/browser/ColorContrastCache.ts +3 -3
  11. package/src/browser/CoreBrowserTerminal.ts +179 -348
  12. package/src/browser/Dom.ts +178 -0
  13. package/src/browser/Linkifier.ts +14 -14
  14. package/src/browser/OscLinkProvider.ts +86 -18
  15. package/src/browser/RenderDebouncer.ts +7 -9
  16. package/src/browser/TimeBasedDebouncer.ts +12 -5
  17. package/src/browser/Types.ts +16 -14
  18. package/src/browser/Viewport.ts +58 -23
  19. package/src/browser/decorations/BufferDecorationRenderer.ts +3 -3
  20. package/src/browser/decorations/ColorZoneStore.ts +1 -1
  21. package/src/browser/decorations/OverviewRulerRenderer.ts +36 -20
  22. package/src/browser/input/CompositionHelper.ts +47 -11
  23. package/src/browser/input/Mouse.ts +5 -9
  24. package/src/browser/input/MoveToCell.ts +3 -3
  25. package/src/browser/public/Terminal.ts +33 -36
  26. package/src/browser/renderer/dom/DomRenderer.ts +265 -89
  27. package/src/browser/renderer/dom/DomRendererRowFactory.ts +34 -27
  28. package/src/browser/renderer/dom/WidthCache.ts +57 -55
  29. package/src/browser/renderer/shared/Constants.ts +7 -0
  30. package/src/browser/renderer/shared/RendererUtils.ts +1 -1
  31. package/src/browser/renderer/shared/SelectionRenderModel.ts +2 -2
  32. package/src/browser/renderer/shared/TextBlinkStateManager.ts +97 -0
  33. package/src/browser/renderer/shared/Types.ts +10 -4
  34. package/src/browser/scrollable/abstractScrollbar.ts +300 -0
  35. package/src/browser/scrollable/fastDomNode.ts +126 -0
  36. package/src/browser/scrollable/globalPointerMoveMonitor.ts +90 -0
  37. package/src/browser/scrollable/horizontalScrollbar.ts +85 -0
  38. package/src/browser/scrollable/mouseEvent.ts +292 -0
  39. package/src/browser/scrollable/scrollable.ts +486 -0
  40. package/src/browser/scrollable/scrollableElement.ts +581 -0
  41. package/src/browser/scrollable/scrollableElementOptions.ts +161 -0
  42. package/src/browser/scrollable/scrollbarArrow.ts +110 -0
  43. package/src/browser/scrollable/scrollbarState.ts +246 -0
  44. package/src/browser/scrollable/scrollbarVisibilityController.ts +113 -0
  45. package/src/browser/scrollable/touch.ts +485 -0
  46. package/src/browser/scrollable/verticalScrollbar.ts +143 -0
  47. package/src/browser/scrollable/widget.ts +23 -0
  48. package/src/browser/selection/SelectionModel.ts +1 -1
  49. package/src/browser/services/CharSizeService.ts +4 -4
  50. package/src/browser/services/CharacterJoinerService.ts +13 -11
  51. package/src/browser/services/CoreBrowserService.ts +7 -5
  52. package/src/browser/services/KeyboardService.ts +67 -0
  53. package/src/browser/services/LinkProviderService.ts +3 -3
  54. package/src/browser/services/MouseCoordsService.ts +47 -0
  55. package/src/browser/services/MouseService.ts +619 -23
  56. package/src/browser/services/RenderService.ts +33 -21
  57. package/src/browser/services/SelectionService.ts +72 -54
  58. package/src/browser/services/Services.ts +44 -21
  59. package/src/browser/services/ThemeService.ts +9 -9
  60. package/src/common/Async.ts +141 -0
  61. package/src/common/CircularList.ts +24 -3
  62. package/src/common/Color.ts +13 -5
  63. package/src/common/CoreTerminal.ts +61 -35
  64. package/src/common/Event.ts +118 -0
  65. package/src/common/InputHandler.ts +286 -105
  66. package/src/common/Lifecycle.ts +113 -0
  67. package/src/common/Platform.ts +15 -5
  68. package/src/common/SortedList.ts +8 -4
  69. package/src/common/StringBuilder.ts +67 -0
  70. package/src/common/TaskQueue.ts +17 -8
  71. package/src/common/Types.ts +68 -206
  72. package/src/common/Version.ts +1 -1
  73. package/src/common/WindowsMode.ts +2 -2
  74. package/src/common/buffer/AttributeData.ts +3 -2
  75. package/src/common/buffer/Buffer.ts +47 -32
  76. package/src/common/buffer/BufferLine.ts +175 -100
  77. package/src/common/buffer/BufferLineStringCache.ts +69 -0
  78. package/src/common/buffer/BufferReflow.ts +7 -4
  79. package/src/common/buffer/BufferSet.ts +13 -9
  80. package/src/common/buffer/CellData.ts +61 -4
  81. package/src/common/buffer/Constants.ts +13 -13
  82. package/src/common/buffer/Marker.ts +4 -4
  83. package/src/common/buffer/Types.ts +153 -3
  84. package/src/common/data/Charsets.ts +4 -7
  85. package/src/common/data/EscapeSequences.ts +71 -70
  86. package/src/common/input/Keyboard.ts +17 -10
  87. package/src/common/input/KittyKeyboard.ts +526 -0
  88. package/src/common/input/TextDecoder.ts +3 -3
  89. package/src/common/input/UnicodeV6.ts +3 -2
  90. package/src/common/input/Win32InputMode.ts +297 -0
  91. package/src/common/input/WriteBuffer.ts +108 -39
  92. package/src/common/input/XParseColor.ts +2 -2
  93. package/src/common/parser/ApcParser.ts +196 -0
  94. package/src/common/parser/Constants.ts +14 -4
  95. package/src/common/parser/DcsParser.ts +15 -16
  96. package/src/common/parser/EscapeSequenceParser.ts +214 -72
  97. package/src/common/parser/OscParser.ts +14 -15
  98. package/src/common/parser/Params.ts +31 -12
  99. package/src/common/parser/Types.ts +40 -30
  100. package/src/common/public/BufferApiView.ts +3 -3
  101. package/src/common/public/BufferLineApiView.ts +4 -4
  102. package/src/common/public/BufferNamespaceApi.ts +5 -5
  103. package/src/common/public/ParserApi.ts +5 -2
  104. package/src/common/public/UnicodeApi.ts +1 -1
  105. package/src/common/services/BufferService.ts +17 -13
  106. package/src/common/services/CharsetService.ts +6 -2
  107. package/src/common/services/CoreService.ts +23 -10
  108. package/src/common/services/DecorationService.ts +260 -15
  109. package/src/common/services/InstantiationService.ts +2 -2
  110. package/src/common/services/LogService.ts +2 -32
  111. package/src/common/services/{CoreMouseService.ts → MouseStateService.ts} +22 -133
  112. package/src/common/services/OptionsService.ts +17 -7
  113. package/src/common/services/OscLinkService.ts +3 -2
  114. package/src/common/services/ServiceRegistry.ts +14 -8
  115. package/src/common/services/Services.ts +54 -50
  116. package/src/common/services/UnicodeService.ts +6 -11
  117. package/typings/xterm.d.ts +329 -34
  118. package/src/common/Clone.ts +0 -23
  119. package/src/common/TypedArrayUtils.ts +0 -17
  120. package/src/vs/base/browser/browser.ts +0 -141
  121. package/src/vs/base/browser/canIUse.ts +0 -49
  122. package/src/vs/base/browser/dom.ts +0 -2369
  123. package/src/vs/base/browser/fastDomNode.ts +0 -316
  124. package/src/vs/base/browser/globalPointerMoveMonitor.ts +0 -112
  125. package/src/vs/base/browser/iframe.ts +0 -135
  126. package/src/vs/base/browser/keyboardEvent.ts +0 -213
  127. package/src/vs/base/browser/mouseEvent.ts +0 -229
  128. package/src/vs/base/browser/touch.ts +0 -372
  129. package/src/vs/base/browser/ui/scrollbar/abstractScrollbar.ts +0 -303
  130. package/src/vs/base/browser/ui/scrollbar/horizontalScrollbar.ts +0 -114
  131. package/src/vs/base/browser/ui/scrollbar/scrollableElement.ts +0 -720
  132. package/src/vs/base/browser/ui/scrollbar/scrollableElementOptions.ts +0 -165
  133. package/src/vs/base/browser/ui/scrollbar/scrollbarArrow.ts +0 -114
  134. package/src/vs/base/browser/ui/scrollbar/scrollbarState.ts +0 -243
  135. package/src/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.ts +0 -118
  136. package/src/vs/base/browser/ui/scrollbar/verticalScrollbar.ts +0 -116
  137. package/src/vs/base/browser/ui/widget.ts +0 -57
  138. package/src/vs/base/browser/window.ts +0 -14
  139. package/src/vs/base/common/arrays.ts +0 -887
  140. package/src/vs/base/common/arraysFind.ts +0 -202
  141. package/src/vs/base/common/assert.ts +0 -71
  142. package/src/vs/base/common/async.ts +0 -1992
  143. package/src/vs/base/common/cancellation.ts +0 -148
  144. package/src/vs/base/common/charCode.ts +0 -450
  145. package/src/vs/base/common/collections.ts +0 -140
  146. package/src/vs/base/common/decorators.ts +0 -130
  147. package/src/vs/base/common/equals.ts +0 -146
  148. package/src/vs/base/common/errors.ts +0 -303
  149. package/src/vs/base/common/event.ts +0 -1778
  150. package/src/vs/base/common/functional.ts +0 -32
  151. package/src/vs/base/common/hash.ts +0 -316
  152. package/src/vs/base/common/iterator.ts +0 -159
  153. package/src/vs/base/common/keyCodes.ts +0 -526
  154. package/src/vs/base/common/keybindings.ts +0 -284
  155. package/src/vs/base/common/lazy.ts +0 -47
  156. package/src/vs/base/common/lifecycle.ts +0 -801
  157. package/src/vs/base/common/linkedList.ts +0 -142
  158. package/src/vs/base/common/map.ts +0 -202
  159. package/src/vs/base/common/numbers.ts +0 -98
  160. package/src/vs/base/common/observable.ts +0 -76
  161. package/src/vs/base/common/observableInternal/api.ts +0 -31
  162. package/src/vs/base/common/observableInternal/autorun.ts +0 -281
  163. package/src/vs/base/common/observableInternal/base.ts +0 -489
  164. package/src/vs/base/common/observableInternal/debugName.ts +0 -145
  165. package/src/vs/base/common/observableInternal/derived.ts +0 -428
  166. package/src/vs/base/common/observableInternal/lazyObservableValue.ts +0 -146
  167. package/src/vs/base/common/observableInternal/logging.ts +0 -328
  168. package/src/vs/base/common/observableInternal/promise.ts +0 -209
  169. package/src/vs/base/common/observableInternal/utils.ts +0 -610
  170. package/src/vs/base/common/platform.ts +0 -281
  171. package/src/vs/base/common/scrollable.ts +0 -522
  172. package/src/vs/base/common/sequence.ts +0 -34
  173. package/src/vs/base/common/stopwatch.ts +0 -43
  174. package/src/vs/base/common/strings.ts +0 -557
  175. package/src/vs/base/common/symbols.ts +0 -9
  176. package/src/vs/base/common/uint.ts +0 -59
  177. package/src/vs/patches/nls.ts +0 -90
  178. package/src/vs/typings/base-common.d.ts +0 -20
  179. package/src/vs/typings/require.d.ts +0 -42
  180. package/src/vs/typings/vscode-globals-nls.d.ts +0 -36
  181. package/src/vs/typings/vscode-globals-product.d.ts +0 -33
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Copyright (c) 2024-2026 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ *
5
+ * Minimal lifecycle utilities for xterm.js core.
6
+ * Simplified from VS Code's lifecycle.ts - no tracking/leak detection.
7
+ */
8
+
9
+ export interface IDisposable {
10
+ dispose(): void;
11
+ }
12
+
13
+ export function toDisposable(fn: () => void): IDisposable {
14
+ return { dispose: fn };
15
+ }
16
+
17
+ export function dispose<T extends IDisposable>(disposable: T): T;
18
+ export function dispose<T extends IDisposable>(disposable: T | undefined): T | undefined;
19
+ export function dispose<T extends IDisposable>(disposables: T[]): T[];
20
+ export function dispose<T extends IDisposable>(arg: T | T[] | undefined): T | T[] | undefined {
21
+ if (!arg) {
22
+ return arg;
23
+ }
24
+ if (Array.isArray(arg)) {
25
+ for (const d of arg) {
26
+ d.dispose();
27
+ }
28
+ return [];
29
+ }
30
+ arg.dispose();
31
+ return arg;
32
+ }
33
+
34
+ export function combinedDisposable(...disposables: IDisposable[]): IDisposable {
35
+ return toDisposable(() => dispose(disposables));
36
+ }
37
+
38
+ export class DisposableStore implements IDisposable {
39
+ private readonly _disposables = new Set<IDisposable>();
40
+ private _isDisposed = false;
41
+
42
+ public get isDisposed(): boolean {
43
+ return this._isDisposed;
44
+ }
45
+
46
+ public add<T extends IDisposable>(o: T): T {
47
+ if (this._isDisposed) {
48
+ o.dispose();
49
+ } else {
50
+ this._disposables.add(o);
51
+ }
52
+ return o;
53
+ }
54
+
55
+ public dispose(): void {
56
+ if (this._isDisposed) {
57
+ return;
58
+ }
59
+ this._isDisposed = true;
60
+ for (const d of this._disposables) {
61
+ d.dispose();
62
+ }
63
+ this._disposables.clear();
64
+ }
65
+
66
+ public clear(): void {
67
+ for (const d of this._disposables) {
68
+ d.dispose();
69
+ }
70
+ this._disposables.clear();
71
+ }
72
+ }
73
+
74
+ export abstract class Disposable implements IDisposable {
75
+ public static readonly None: IDisposable = Object.freeze({ dispose() { } });
76
+
77
+ protected readonly _store = new DisposableStore();
78
+
79
+ public dispose(): void {
80
+ this._store.dispose();
81
+ }
82
+
83
+ protected _register<T extends IDisposable>(o: T): T {
84
+ return this._store.add(o);
85
+ }
86
+ }
87
+
88
+ export class MutableDisposable<T extends IDisposable> implements IDisposable {
89
+ private _value: T | undefined;
90
+ private _isDisposed = false;
91
+
92
+ public get value(): T | undefined {
93
+ return this._isDisposed ? undefined : this._value;
94
+ }
95
+
96
+ public set value(value: T | undefined) {
97
+ if (this._isDisposed || value === this._value) {
98
+ return;
99
+ }
100
+ this._value?.dispose();
101
+ this._value = value;
102
+ }
103
+
104
+ public clear(): void {
105
+ this.value = undefined;
106
+ }
107
+
108
+ public dispose(): void {
109
+ this._isDisposed = true;
110
+ this._value?.dispose();
111
+ this._value = undefined;
112
+ }
113
+ }
@@ -14,13 +14,25 @@ interface INavigator {
14
14
  declare const navigator: INavigator;
15
15
  declare const process: unknown;
16
16
 
17
- export const isNode = (typeof process !== 'undefined' && 'title' in (process as any)) ? true : false;
17
+ // navigator.userAgent is also checked here because bundling with the process module can cause
18
+ // issues otherwise. Note that navigator exists in Node.js 21+ but the userAgent is
19
+ // "Node.js/<version>".
20
+ export const isNode = (typeof process !== 'undefined' && 'title' in (process as any) && (typeof navigator === 'undefined' || navigator.userAgent.startsWith('Node.js/'))) ? true : false;
18
21
  const userAgent = (isNode) ? 'node' : navigator.userAgent;
19
22
  const platform = (isNode) ? 'node' : navigator.platform;
20
23
 
21
24
  export const isFirefox = userAgent.includes('Firefox');
25
+ export const isChrome = userAgent.includes('Chrome');
22
26
  export const isLegacyEdge = userAgent.includes('Edge');
23
27
  export const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);
28
+
29
+ interface IZoomWindow {
30
+ devicePixelRatio?: number;
31
+ }
32
+
33
+ export function getZoomFactor(_targetWindow: IZoomWindow): number {
34
+ return 1;
35
+ }
24
36
  export function getSafariVersion(): number {
25
37
  if (!isSafari) {
26
38
  return 0;
@@ -29,15 +41,13 @@ export function getSafariVersion(): number {
29
41
  if (majorVersion === null || majorVersion.length < 2) {
30
42
  return 0;
31
43
  }
32
- return parseInt(majorVersion[1]);
44
+ return parseInt(majorVersion[1], 10);
33
45
  }
34
46
 
35
- // Find the users platform. We use this to interpret the meta key
47
+ // Find the user's platform. We use this to interpret the meta key
36
48
  // and ISO third level shifts.
37
49
  // http://stackoverflow.com/q/19877924/577598
38
50
  export const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);
39
- export const isIpad = platform === 'iPad';
40
- export const isIphone = platform === 'iPhone';
41
51
  export const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);
42
52
  export const isLinux = platform.indexOf('Linux') >= 0;
43
53
  // Note that when this is true, isLinux will also be true.
@@ -3,7 +3,8 @@
3
3
  * @license MIT
4
4
  */
5
5
 
6
- import { IdleTaskQueue } from 'common/TaskQueue';
6
+ import { IdleTaskQueue } from './TaskQueue';
7
+ import type { ILogService } from './services/Services';
7
8
 
8
9
  // Work variables to avoid garbage collection.
9
10
  let i = 0;
@@ -18,16 +19,19 @@ export class SortedList<T> {
18
19
  private _array: T[] = [];
19
20
 
20
21
  private readonly _insertedValues: T[] = [];
21
- private readonly _flushInsertedTask = new IdleTaskQueue();
22
+ private readonly _flushInsertedTask: InstanceType<typeof IdleTaskQueue>;
22
23
  private _isFlushingInserted = false;
23
24
 
24
25
  private readonly _deletedIndices: number[] = [];
25
- private readonly _flushDeletedTask = new IdleTaskQueue();
26
+ private readonly _flushDeletedTask: InstanceType<typeof IdleTaskQueue>;
26
27
  private _isFlushingDeleted = false;
27
28
 
28
29
  constructor(
29
- private readonly _getKey: (value: T) => number
30
+ private readonly _getKey: (value: T) => number,
31
+ logService: ILogService
30
32
  ) {
33
+ this._flushInsertedTask = new IdleTaskQueue(logService);
34
+ this._flushDeletedTask = new IdleTaskQueue(logService);
31
35
  }
32
36
 
33
37
  public clear(): void {
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Copyright (c) 2026 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ /**
7
+ * Accumulates string data from multiple chunks without O(n²) string concatenation.
8
+ */
9
+ export class StringBuilder {
10
+ private _chunks: string[] = [];
11
+ private _length = 0;
12
+
13
+ public get length(): number {
14
+ return this._length;
15
+ }
16
+
17
+ public reset(): void {
18
+ this._chunks.length = 0;
19
+ this._length = 0;
20
+ }
21
+
22
+ public append(chunk: string): void {
23
+ this._chunks.push(chunk);
24
+ this._length += chunk.length;
25
+ }
26
+
27
+ public toString(): string {
28
+ return this._chunks.join('');
29
+ }
30
+ }
31
+
32
+ /**
33
+ * String builder that rejects payloads larger than a fixed limit.
34
+ */
35
+ export class LimitedStringBuilder {
36
+ private readonly _builder = new StringBuilder();
37
+
38
+ constructor(private readonly _limit: number) { }
39
+
40
+ public get length(): number {
41
+ return this._builder.length;
42
+ }
43
+
44
+ public get limit(): number {
45
+ return this._limit;
46
+ }
47
+
48
+ public reset(): void {
49
+ this._builder.reset();
50
+ }
51
+
52
+ /**
53
+ * @returns true if the limit was exceeded (buffer is cleared in that case)
54
+ */
55
+ public append(chunk: string): boolean {
56
+ this._builder.append(chunk);
57
+ if (this._builder.length > this._limit) {
58
+ this._builder.reset();
59
+ return true;
60
+ }
61
+ return false;
62
+ }
63
+
64
+ public toString(): string {
65
+ return this._builder.toString();
66
+ }
67
+ }
@@ -3,12 +3,12 @@
3
3
  * @license MIT
4
4
  */
5
5
 
6
- import { isNode } from 'common/Platform';
6
+ import type { ILogService } from './services/Services';
7
7
 
8
8
  interface ITaskQueue {
9
9
  /**
10
10
  * Adds a task to the queue which will run in a future idle callback.
11
- * To avoid perceivable stalls on the mainthread, tasks with heavy workload
11
+ * To avoid perceivable stalls on the main thread, tasks with heavy workload
12
12
  * should split their work into smaller pieces and return `true` to get
13
13
  * called again until the work is done (on falsy return value).
14
14
  */
@@ -34,6 +34,11 @@ abstract class TaskQueue implements ITaskQueue {
34
34
  private _tasks: (() => boolean | void)[] = [];
35
35
  private _idleCallback?: number;
36
36
  private _i = 0;
37
+ protected readonly _logService: ILogService;
38
+
39
+ constructor(logService: ILogService) {
40
+ this._logService = logService;
41
+ }
37
42
 
38
43
  protected abstract _requestCallback(callback: CallbackWithDeadline): number;
39
44
  protected abstract _cancelCallback(identifier: number): void;
@@ -69,10 +74,10 @@ abstract class TaskQueue implements ITaskQueue {
69
74
 
70
75
  private _process(deadline: ITaskDeadline): void {
71
76
  this._idleCallback = undefined;
72
- let taskDuration = 0;
77
+ let taskDuration: number;
73
78
  let longestTask = 0;
74
79
  let lastDeadlineRemaining = deadline.timeRemaining();
75
- let deadlineRemaining = 0;
80
+ let deadlineRemaining: number;
76
81
  while (this._i < this._tasks.length) {
77
82
  taskDuration = performance.now();
78
83
  if (!this._tasks[this._i]()) {
@@ -90,7 +95,7 @@ abstract class TaskQueue implements ITaskQueue {
90
95
  // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the
91
96
  // task should be split into sub-tasks to ensure the UI remains responsive.
92
97
  if (lastDeadlineRemaining - taskDuration < -20) {
93
- console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);
98
+ this._logService.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);
94
99
  }
95
100
  this._start();
96
101
  return;
@@ -142,7 +147,7 @@ class IdleTaskQueueInternal extends TaskQueue {
142
147
  * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.
143
148
  */
144
149
  // eslint-disable-next-line @typescript-eslint/naming-convention
145
- export const IdleTaskQueue = (!isNode && 'requestIdleCallback' in window) ? IdleTaskQueueInternal : PriorityTaskQueue;
150
+ export const IdleTaskQueue = ('requestIdleCallback' in globalThis) ? IdleTaskQueueInternal : PriorityTaskQueue;
146
151
 
147
152
  /**
148
153
  * An object that tracks a single debounced task that will run on the next idle frame. When called
@@ -151,8 +156,8 @@ export const IdleTaskQueue = (!isNode && 'requestIdleCallback' in window) ? Idle
151
156
  export class DebouncedIdleTask {
152
157
  private _queue: ITaskQueue;
153
158
 
154
- constructor() {
155
- this._queue = new IdleTaskQueue();
159
+ constructor(logService: ILogService) {
160
+ this._queue = new IdleTaskQueue(logService);
156
161
  }
157
162
 
158
163
  public set(task: () => boolean | void): void {
@@ -163,4 +168,8 @@ export class DebouncedIdleTask {
163
168
  public flush(): void {
164
169
  this._queue.flush();
165
170
  }
171
+
172
+ public dispose(): void {
173
+ this._queue.clear();
174
+ }
166
175
  }