@xterm/xterm 5.6.0-beta.42 → 5.6.0-beta.44

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 (83) hide show
  1. package/README.md +1 -1
  2. package/css/xterm.css +65 -4
  3. package/lib/xterm.js +1 -1
  4. package/lib/xterm.js.map +1 -1
  5. package/lib/xterm.mjs +34 -7
  6. package/lib/xterm.mjs.map +4 -4
  7. package/package.json +2 -2
  8. package/src/browser/CoreBrowserTerminal.ts +53 -68
  9. package/src/browser/Types.ts +4 -1
  10. package/src/browser/Viewport.ts +142 -370
  11. package/src/browser/decorations/OverviewRulerRenderer.ts +25 -35
  12. package/src/browser/renderer/shared/CharAtlasUtils.ts +4 -0
  13. package/src/browser/services/ThemeService.ts +10 -1
  14. package/src/browser/shared/Constants.ts +8 -0
  15. package/src/common/CoreTerminal.ts +7 -13
  16. package/src/common/Types.ts +0 -6
  17. package/src/common/services/BufferService.ts +2 -2
  18. package/src/common/services/CoreMouseService.ts +2 -0
  19. package/src/common/services/Services.ts +10 -3
  20. package/src/vs/base/browser/browser.ts +141 -0
  21. package/src/vs/base/browser/canIUse.ts +49 -0
  22. package/src/vs/base/browser/dom.ts +2369 -0
  23. package/src/vs/base/browser/fastDomNode.ts +316 -0
  24. package/src/vs/base/browser/globalPointerMoveMonitor.ts +112 -0
  25. package/src/vs/base/browser/iframe.ts +135 -0
  26. package/src/vs/base/browser/keyboardEvent.ts +213 -0
  27. package/src/vs/base/browser/mouseEvent.ts +229 -0
  28. package/src/vs/base/browser/touch.ts +372 -0
  29. package/src/vs/base/browser/ui/scrollbar/abstractScrollbar.ts +303 -0
  30. package/src/vs/base/browser/ui/scrollbar/horizontalScrollbar.ts +114 -0
  31. package/src/vs/base/browser/ui/scrollbar/scrollableElement.ts +718 -0
  32. package/src/vs/base/browser/ui/scrollbar/scrollableElementOptions.ts +165 -0
  33. package/src/vs/base/browser/ui/scrollbar/scrollbarArrow.ts +114 -0
  34. package/src/vs/base/browser/ui/scrollbar/scrollbarState.ts +243 -0
  35. package/src/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.ts +118 -0
  36. package/src/vs/base/browser/ui/scrollbar/verticalScrollbar.ts +116 -0
  37. package/src/vs/base/browser/ui/widget.ts +57 -0
  38. package/src/vs/base/browser/window.ts +14 -0
  39. package/src/vs/base/common/arrays.ts +887 -0
  40. package/src/vs/base/common/arraysFind.ts +202 -0
  41. package/src/vs/base/common/assert.ts +71 -0
  42. package/src/vs/base/common/async.ts +1992 -0
  43. package/src/vs/base/common/cancellation.ts +148 -0
  44. package/src/vs/base/common/charCode.ts +450 -0
  45. package/src/vs/base/common/collections.ts +140 -0
  46. package/src/vs/base/common/decorators.ts +130 -0
  47. package/src/vs/base/common/equals.ts +146 -0
  48. package/src/vs/base/common/errors.ts +303 -0
  49. package/src/vs/base/common/event.ts +1762 -0
  50. package/src/vs/base/common/functional.ts +32 -0
  51. package/src/vs/base/common/hash.ts +316 -0
  52. package/src/vs/base/common/iterator.ts +159 -0
  53. package/src/vs/base/common/keyCodes.ts +526 -0
  54. package/src/vs/base/common/keybindings.ts +284 -0
  55. package/src/vs/base/common/lazy.ts +47 -0
  56. package/src/vs/base/common/lifecycle.ts +801 -0
  57. package/src/vs/base/common/linkedList.ts +142 -0
  58. package/src/vs/base/common/map.ts +202 -0
  59. package/src/vs/base/common/numbers.ts +98 -0
  60. package/src/vs/base/common/observable.ts +76 -0
  61. package/src/vs/base/common/observableInternal/api.ts +31 -0
  62. package/src/vs/base/common/observableInternal/autorun.ts +281 -0
  63. package/src/vs/base/common/observableInternal/base.ts +489 -0
  64. package/src/vs/base/common/observableInternal/debugName.ts +145 -0
  65. package/src/vs/base/common/observableInternal/derived.ts +428 -0
  66. package/src/vs/base/common/observableInternal/lazyObservableValue.ts +146 -0
  67. package/src/vs/base/common/observableInternal/logging.ts +328 -0
  68. package/src/vs/base/common/observableInternal/promise.ts +209 -0
  69. package/src/vs/base/common/observableInternal/utils.ts +610 -0
  70. package/src/vs/base/common/platform.ts +281 -0
  71. package/src/vs/base/common/scrollable.ts +522 -0
  72. package/src/vs/base/common/sequence.ts +34 -0
  73. package/src/vs/base/common/stopwatch.ts +43 -0
  74. package/src/vs/base/common/strings.ts +557 -0
  75. package/src/vs/base/common/symbols.ts +9 -0
  76. package/src/vs/base/common/uint.ts +59 -0
  77. package/src/vs/patches/nls.ts +90 -0
  78. package/src/vs/typings/base-common.d.ts +20 -0
  79. package/src/vs/typings/require.d.ts +42 -0
  80. package/src/vs/typings/thenable.d.ts +12 -0
  81. package/src/vs/typings/vscode-globals-nls.d.ts +36 -0
  82. package/src/vs/typings/vscode-globals-product.d.ts +33 -0
  83. package/typings/xterm.d.ts +25 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@xterm/xterm",
3
3
  "description": "Full xterm terminal, in your browser",
4
- "version": "5.6.0-beta.42",
4
+ "version": "5.6.0-beta.44",
5
5
  "main": "lib/xterm.js",
6
6
  "module": "lib/xterm.mjs",
7
7
  "style": "css/xterm.css",
@@ -28,7 +28,6 @@
28
28
  "presetup": "npm run install-addons",
29
29
  "install-addons": "node ./bin/install-addons.js",
30
30
  "start": "node demo/start",
31
- "build-demo": "webpack --config ./demo/webpack.config.js",
32
31
  "build": "npm run tsc",
33
32
  "watch": "npm run tsc-watch",
34
33
  "tsc": "tsc -b ./tsconfig.all.json",
@@ -78,6 +77,7 @@
78
77
  "@types/jsdom": "^16.2.13",
79
78
  "@types/mocha": "^9.0.0",
80
79
  "@types/node": "^18.16.0",
80
+ "@types/trusted-types": "^1.0.6",
81
81
  "@types/utf8": "^3.0.0",
82
82
  "@types/webpack": "^5.28.0",
83
83
  "@types/ws": "^8.2.0",
@@ -21,12 +21,12 @@
21
21
  * http://linux.die.net/man/7/urxvt
22
22
  */
23
23
 
24
+ import { IDecoration, IDecorationOptions, IDisposable, ILinkProvider, IMarker } from '@xterm/xterm';
24
25
  import { copyHandler, handlePasteEvent, moveTextAreaUnderMouseCursor, paste, rightClickHandler } from 'browser/Clipboard';
25
26
  import { addDisposableDomListener } from 'browser/Lifecycle';
26
- import { Linkifier } from './Linkifier';
27
27
  import * as Strings from 'browser/LocalizableStrings';
28
28
  import { OscLinkProvider } from 'browser/OscLinkProvider';
29
- import { CharacterJoinerHandler, CustomKeyEventHandler, CustomWheelEventHandler, IBrowser, IBufferRange, ICompositionHelper, ILinkifier2, ITerminal, IViewport } from 'browser/Types';
29
+ import { CharacterJoinerHandler, CustomKeyEventHandler, CustomWheelEventHandler, IBrowser, IBufferRange, ICompositionHelper, ILinkifier2, ITerminal } from 'browser/Types';
30
30
  import { Viewport } from 'browser/Viewport';
31
31
  import { BufferDecorationRenderer } from 'browser/decorations/BufferDecorationRenderer';
32
32
  import { OverviewRulerRenderer } from 'browser/decorations/OverviewRulerRenderer';
@@ -36,6 +36,7 @@ import { IRenderer } from 'browser/renderer/shared/Types';
36
36
  import { CharSizeService } from 'browser/services/CharSizeService';
37
37
  import { CharacterJoinerService } from 'browser/services/CharacterJoinerService';
38
38
  import { CoreBrowserService } from 'browser/services/CoreBrowserService';
39
+ import { LinkProviderService } from 'browser/services/LinkProviderService';
39
40
  import { MouseService } from 'browser/services/MouseService';
40
41
  import { RenderService } from 'browser/services/RenderService';
41
42
  import { SelectionService } from 'browser/services/SelectionService';
@@ -46,7 +47,7 @@ import { CoreTerminal } from 'common/CoreTerminal';
46
47
  import { EventEmitter, IEvent, forwardEvent } from 'common/EventEmitter';
47
48
  import { MutableDisposable, toDisposable } from 'common/Lifecycle';
48
49
  import * as Browser from 'common/Platform';
49
- import { ColorRequestType, CoreMouseAction, CoreMouseButton, CoreMouseEventType, IColorEvent, ITerminalOptions, KeyboardResultType, ScrollSource, SpecialColorIndex } from 'common/Types';
50
+ import { ColorRequestType, CoreMouseAction, CoreMouseButton, CoreMouseEventType, IColorEvent, ITerminalOptions, KeyboardResultType, SpecialColorIndex } from 'common/Types';
50
51
  import { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine';
51
52
  import { IBuffer } from 'common/buffer/Types';
52
53
  import { C0, C1_ESCAPED } from 'common/data/EscapeSequences';
@@ -54,10 +55,9 @@ import { evaluateKeyboardEvent } from 'common/input/Keyboard';
54
55
  import { toRgbString } from 'common/input/XParseColor';
55
56
  import { DecorationService } from 'common/services/DecorationService';
56
57
  import { IDecorationService } from 'common/services/Services';
57
- import { IDecoration, IDecorationOptions, IDisposable, ILinkProvider, IMarker } from '@xterm/xterm';
58
58
  import { WindowsOptionsReportType } from '../common/InputHandler';
59
59
  import { AccessibilityManager } from './AccessibilityManager';
60
- import { LinkProviderService } from 'browser/services/LinkProviderService';
60
+ import { Linkifier } from './Linkifier';
61
61
 
62
62
  export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
63
63
  public textarea: HTMLTextAreaElement | undefined;
@@ -65,13 +65,13 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
65
65
  public screenElement: HTMLElement | undefined;
66
66
 
67
67
  private _document: Document | undefined;
68
- private _viewportScrollArea: HTMLElement | undefined;
69
68
  private _viewportElement: HTMLElement | undefined;
70
69
  private _helperContainer: HTMLElement | undefined;
71
70
  private _compositionView: HTMLElement | undefined;
72
71
 
73
72
  public linkifier: ILinkifier2 | undefined;
74
73
  private _overviewRulerRenderer: OverviewRulerRenderer | undefined;
74
+ private _viewport: Viewport | undefined;
75
75
 
76
76
  public browser: IBrowser = Browser as any;
77
77
 
@@ -118,7 +118,6 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
118
118
  */
119
119
  private _unprocessedDeadKey: boolean = false;
120
120
 
121
- public viewport: IViewport | undefined;
122
121
  private _compositionHelper: ICompositionHelper | undefined;
123
122
  private _accessibilityManager: MutableDisposable<AccessibilityManager> = this.register(new MutableDisposable());
124
123
 
@@ -427,10 +426,6 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
427
426
  this._viewportElement.classList.add('xterm-viewport');
428
427
  fragment.appendChild(this._viewportElement);
429
428
 
430
- this._viewportScrollArea = this._document.createElement('div');
431
- this._viewportScrollArea.classList.add('xterm-scroll-area');
432
- this._viewportElement.appendChild(this._viewportScrollArea);
433
-
434
429
  this.screenElement = this._document.createElement('div');
435
430
  this.screenElement.classList.add('xterm-screen');
436
431
  this.register(addDisposableDomListener(this.screenElement, 'mousemove', (ev: MouseEvent) => this.updateCursorStyle(ev)));
@@ -503,11 +498,6 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
503
498
  this._renderService.setRenderer(this._createRenderer());
504
499
  }
505
500
 
506
- this.viewport = this._instantiationService.createInstance(Viewport, this._viewportElement, this._viewportScrollArea);
507
- this.viewport.onRequestScrollLines(e => this.scrollLines(e.amount, e.suppressScrollEvent, ScrollSource.VIEWPORT)),
508
- this.register(this._inputHandler.onRequestSyncScrollBar(() => this.viewport!.syncScrollArea()));
509
- this.register(this.viewport);
510
-
511
501
  this.register(this.onCursorMove(() => {
512
502
  this._renderService!.handleCursorMove();
513
503
  this._syncTextArea();
@@ -515,7 +505,9 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
515
505
  this.register(this.onResize(() => this._renderService!.handleResize(this.cols, this.rows)));
516
506
  this.register(this.onBlur(() => this._renderService!.handleBlur()));
517
507
  this.register(this.onFocus(() => this._renderService!.handleFocus()));
518
- this.register(this._renderService.onDimensionsChange(() => this.viewport!.syncScrollArea()));
508
+
509
+ this._viewport = this.register(this._instantiationService.createInstance(Viewport, this.element, this.screenElement));
510
+ this.register(this._viewport.onRequestScrollLines(e => super.scrollLines(e, false)));
519
511
 
520
512
  this._selectionService = this.register(this._instantiationService.createInstance(SelectionService,
521
513
  this.element,
@@ -534,11 +526,7 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
534
526
  this.textarea!.focus();
535
527
  this.textarea!.select();
536
528
  }));
537
- this.register(this._onScroll.event(ev => {
538
- this.viewport!.syncScrollArea();
539
- this._selectionService!.refresh();
540
- }));
541
- this.register(addDisposableDomListener(this._viewportElement, 'scroll', () => this._selectionService!.refresh()));
529
+ this.register(this._onScroll.event(() => this._selectionService!.refresh()));
542
530
 
543
531
  this.register(this._instantiationService.createInstance(BufferDecorationRenderer, this.screenElement));
544
532
  this.register(addDisposableDomListener(this.element, 'mousedown', (e: MouseEvent) => this._selectionService!.handleMouseDown(e)));
@@ -642,13 +630,11 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
642
630
  if (self._customWheelEventHandler && self._customWheelEventHandler(ev as WheelEvent) === false) {
643
631
  return false;
644
632
  }
645
- const amount = self.viewport!.getLinesScrolled(ev as WheelEvent);
646
-
647
- if (amount === 0) {
633
+ const deltaY = (ev as WheelEvent).deltaY;
634
+ if (deltaY === 0) {
648
635
  return false;
649
636
  }
650
-
651
- action = (ev as WheelEvent).deltaY < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN;
637
+ action = deltaY < 0 ? CoreMouseAction.UP : CoreMouseAction.DOWN;
652
638
  but = CoreMouseButton.WHEEL;
653
639
  break;
654
640
  default:
@@ -807,42 +793,23 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
807
793
 
808
794
  if (!this.buffer.hasScrollback) {
809
795
  // Convert wheel events into up/down events when the buffer does not have scrollback, this
810
- // enables scrolling in apps hosted in the alt buffer such as vim or tmux.
811
- const amount = this.viewport!.getLinesScrolled(ev);
796
+ // enables scrolling in apps hosted in the alt buffer such as vim or tmux even when mouse
797
+ // events are not enabled.
798
+ // This used implementation used get the actual lines/partial lines scrolled from the
799
+ // viewport but since moving to the new viewport implementation has been simplified to
800
+ // simply send a single up or down sequence.
812
801
 
813
802
  // Do nothing if there's no vertical scroll
814
- if (amount === 0) {
815
- return;
803
+ const deltaY = (ev as WheelEvent).deltaY;
804
+ if (deltaY === 0) {
805
+ return false;
816
806
  }
817
807
 
818
808
  // Construct and send sequences
819
809
  const sequence = C0.ESC + (this.coreService.decPrivateModes.applicationCursorKeys ? 'O' : '[') + (ev.deltaY < 0 ? 'A' : 'B');
820
- let data = '';
821
- for (let i = 0; i < Math.abs(amount); i++) {
822
- data += sequence;
823
- }
824
- this.coreService.triggerDataEvent(data, true);
810
+ this.coreService.triggerDataEvent(sequence, true);
825
811
  return this.cancel(ev, true);
826
812
  }
827
-
828
- // normal viewport scrolling
829
- // conditionally stop event, if the viewport still had rows to scroll within
830
- if (this.viewport!.handleWheel(ev)) {
831
- return this.cancel(ev);
832
- }
833
- }, { passive: false }));
834
-
835
- this.register(addDisposableDomListener(el, 'touchstart', (ev: TouchEvent) => {
836
- if (this.coreMouseService.areMouseEventsActive) return;
837
- this.viewport!.handleTouchStart(ev);
838
- return this.cancel(ev);
839
- }, { passive: true }));
840
-
841
- this.register(addDisposableDomListener(el, 'touchmove', (ev: TouchEvent) => {
842
- if (this.coreMouseService.areMouseEventsActive) return;
843
- if (!this.viewport!.handleTouchMove(ev)) {
844
- return this.cancel(ev);
845
- }
846
813
  }, { passive: false }));
847
814
  }
848
815
 
@@ -878,12 +845,36 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
878
845
  }
879
846
  }
880
847
 
881
- public scrollLines(disp: number, suppressScrollEvent?: boolean, source = ScrollSource.TERMINAL): void {
882
- if (source === ScrollSource.VIEWPORT) {
883
- super.scrollLines(disp, suppressScrollEvent, source);
884
- this.refresh(0, this.rows - 1);
848
+ public scrollLines(disp: number, suppressScrollEvent?: boolean): void {
849
+ // All scrollLines methods need to go via the viewport in order to support smooth scroll
850
+ if (this._viewport) {
851
+ this._viewport.scrollLines(disp);
852
+ } else {
853
+ super.scrollLines(disp, suppressScrollEvent);
854
+ }
855
+ this.refresh(0, this.rows - 1);
856
+ }
857
+
858
+ public scrollPages(pageCount: number): void {
859
+ this.scrollLines(pageCount * (this.rows - 1));
860
+ }
861
+
862
+ public scrollToTop(): void {
863
+ this.scrollLines(-this._bufferService.buffer.ydisp);
864
+ }
865
+
866
+ public scrollToBottom(disableSmoothScroll?: boolean): void {
867
+ if (disableSmoothScroll && this._viewport) {
868
+ this._viewport.scrollToLine(this.buffer.ybase, true);
885
869
  } else {
886
- this.viewport?.scrollLines(disp);
870
+ this.scrollLines(this._bufferService.buffer.ybase - this._bufferService.buffer.ydisp);
871
+ }
872
+ }
873
+
874
+ public scrollToLine(line: number): void {
875
+ const scrollAmount = line - this._bufferService.buffer.ydisp;
876
+ if (scrollAmount !== 0) {
877
+ this.scrollLines(scrollAmount);
887
878
  }
888
879
  }
889
880
 
@@ -1011,7 +1002,7 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
1011
1002
 
1012
1003
  if (!shouldIgnoreComposition && !this._compositionHelper!.keydown(event)) {
1013
1004
  if (this.options.scrollOnUserInput && this.buffer.ybase !== this.buffer.ydisp) {
1014
- this.scrollToBottom();
1005
+ this.scrollToBottom(true);
1015
1006
  }
1016
1007
  return false;
1017
1008
  }
@@ -1212,10 +1203,6 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
1212
1203
 
1213
1204
  private _afterResize(x: number, y: number): void {
1214
1205
  this._charSizeService?.measure();
1215
-
1216
- // Sync the scroll area to make sure scroll events don't fire and scroll the viewport to an
1217
- // invalid location
1218
- this.viewport?.syncScrollArea(true);
1219
1206
  }
1220
1207
 
1221
1208
  /**
@@ -1237,8 +1224,7 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
1237
1224
  }
1238
1225
  // IMPORTANT: Fire scroll event before viewport is reset. This ensures embedders get the clear
1239
1226
  // scroll event and that the viewport's state will be valid for immediate writes.
1240
- this._onScroll.fire({ position: this.buffer.ydisp, source: ScrollSource.TERMINAL });
1241
- this.viewport?.reset();
1227
+ this._onScroll.fire({ position: this.buffer.ydisp });
1242
1228
  this.refresh(0, this.rows - 1);
1243
1229
  }
1244
1230
 
@@ -1263,7 +1249,6 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
1263
1249
  super.reset();
1264
1250
  this._selectionService?.reset();
1265
1251
  this._decorationService.reset();
1266
- this.viewport?.reset();
1267
1252
 
1268
1253
  // reattach
1269
1254
  this._customKeyEventHandler = customKeyEventHandler;
@@ -19,7 +19,6 @@ export interface ITerminal extends InternalPassthroughApis, ICoreTerminal {
19
19
  browser: IBrowser;
20
20
  buffer: IBuffer;
21
21
  linkifier: ILinkifier2 | undefined;
22
- viewport: IViewport | undefined;
23
22
  options: Required<ITerminalOptions>;
24
23
 
25
24
  onBlur: IEvent<void>;
@@ -67,6 +66,10 @@ export interface IColorSet {
67
66
  selectionBackgroundOpaque: IColor;
68
67
  selectionInactiveBackgroundTransparent: IColor;
69
68
  selectionInactiveBackgroundOpaque: IColor;
69
+ scrollbarSliderBackground: IColor;
70
+ scrollbarSliderHoverBackground: IColor;
71
+ scrollbarSliderActiveBackground: IColor;
72
+ overviewRulerBorder: IColor;
70
73
  ansi: IColor[];
71
74
  /** Maps original colors to colors that respect minimum contrast ratio. */
72
75
  contrastCache: IColorContrastCache;