@xterm/xterm 5.4.0-beta.1

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 (108) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +235 -0
  3. package/css/xterm.css +209 -0
  4. package/lib/xterm.js +2 -0
  5. package/lib/xterm.js.map +1 -0
  6. package/package.json +101 -0
  7. package/src/browser/AccessibilityManager.ts +278 -0
  8. package/src/browser/Clipboard.ts +93 -0
  9. package/src/browser/ColorContrastCache.ts +34 -0
  10. package/src/browser/Lifecycle.ts +33 -0
  11. package/src/browser/Linkifier2.ts +416 -0
  12. package/src/browser/LocalizableStrings.ts +12 -0
  13. package/src/browser/OscLinkProvider.ts +128 -0
  14. package/src/browser/RenderDebouncer.ts +83 -0
  15. package/src/browser/Terminal.ts +1317 -0
  16. package/src/browser/TimeBasedDebouncer.ts +86 -0
  17. package/src/browser/Types.d.ts +181 -0
  18. package/src/browser/Viewport.ts +401 -0
  19. package/src/browser/decorations/BufferDecorationRenderer.ts +134 -0
  20. package/src/browser/decorations/ColorZoneStore.ts +117 -0
  21. package/src/browser/decorations/OverviewRulerRenderer.ts +218 -0
  22. package/src/browser/input/CompositionHelper.ts +246 -0
  23. package/src/browser/input/Mouse.ts +54 -0
  24. package/src/browser/input/MoveToCell.ts +249 -0
  25. package/src/browser/public/Terminal.ts +260 -0
  26. package/src/browser/renderer/dom/DomRenderer.ts +509 -0
  27. package/src/browser/renderer/dom/DomRendererRowFactory.ts +526 -0
  28. package/src/browser/renderer/dom/WidthCache.ts +160 -0
  29. package/src/browser/renderer/shared/CellColorResolver.ts +137 -0
  30. package/src/browser/renderer/shared/CharAtlasCache.ts +96 -0
  31. package/src/browser/renderer/shared/CharAtlasUtils.ts +75 -0
  32. package/src/browser/renderer/shared/Constants.ts +14 -0
  33. package/src/browser/renderer/shared/CursorBlinkStateManager.ts +146 -0
  34. package/src/browser/renderer/shared/CustomGlyphs.ts +687 -0
  35. package/src/browser/renderer/shared/DevicePixelObserver.ts +41 -0
  36. package/src/browser/renderer/shared/README.md +1 -0
  37. package/src/browser/renderer/shared/RendererUtils.ts +58 -0
  38. package/src/browser/renderer/shared/SelectionRenderModel.ts +91 -0
  39. package/src/browser/renderer/shared/TextureAtlas.ts +1082 -0
  40. package/src/browser/renderer/shared/Types.d.ts +173 -0
  41. package/src/browser/selection/SelectionModel.ts +144 -0
  42. package/src/browser/selection/Types.d.ts +15 -0
  43. package/src/browser/services/CharSizeService.ts +102 -0
  44. package/src/browser/services/CharacterJoinerService.ts +339 -0
  45. package/src/browser/services/CoreBrowserService.ts +137 -0
  46. package/src/browser/services/MouseService.ts +46 -0
  47. package/src/browser/services/RenderService.ts +279 -0
  48. package/src/browser/services/SelectionService.ts +1031 -0
  49. package/src/browser/services/Services.ts +147 -0
  50. package/src/browser/services/ThemeService.ts +237 -0
  51. package/src/common/CircularList.ts +241 -0
  52. package/src/common/Clone.ts +23 -0
  53. package/src/common/Color.ts +357 -0
  54. package/src/common/CoreTerminal.ts +284 -0
  55. package/src/common/EventEmitter.ts +78 -0
  56. package/src/common/InputHandler.ts +3461 -0
  57. package/src/common/Lifecycle.ts +108 -0
  58. package/src/common/MultiKeyMap.ts +42 -0
  59. package/src/common/Platform.ts +44 -0
  60. package/src/common/SortedList.ts +118 -0
  61. package/src/common/TaskQueue.ts +166 -0
  62. package/src/common/TypedArrayUtils.ts +17 -0
  63. package/src/common/Types.d.ts +553 -0
  64. package/src/common/WindowsMode.ts +27 -0
  65. package/src/common/buffer/AttributeData.ts +196 -0
  66. package/src/common/buffer/Buffer.ts +654 -0
  67. package/src/common/buffer/BufferLine.ts +524 -0
  68. package/src/common/buffer/BufferRange.ts +13 -0
  69. package/src/common/buffer/BufferReflow.ts +223 -0
  70. package/src/common/buffer/BufferSet.ts +134 -0
  71. package/src/common/buffer/CellData.ts +94 -0
  72. package/src/common/buffer/Constants.ts +149 -0
  73. package/src/common/buffer/Marker.ts +43 -0
  74. package/src/common/buffer/Types.d.ts +52 -0
  75. package/src/common/data/Charsets.ts +256 -0
  76. package/src/common/data/EscapeSequences.ts +153 -0
  77. package/src/common/input/Keyboard.ts +398 -0
  78. package/src/common/input/TextDecoder.ts +346 -0
  79. package/src/common/input/UnicodeV6.ts +145 -0
  80. package/src/common/input/WriteBuffer.ts +246 -0
  81. package/src/common/input/XParseColor.ts +80 -0
  82. package/src/common/parser/Constants.ts +58 -0
  83. package/src/common/parser/DcsParser.ts +192 -0
  84. package/src/common/parser/EscapeSequenceParser.ts +792 -0
  85. package/src/common/parser/OscParser.ts +238 -0
  86. package/src/common/parser/Params.ts +229 -0
  87. package/src/common/parser/Types.d.ts +275 -0
  88. package/src/common/public/AddonManager.ts +53 -0
  89. package/src/common/public/BufferApiView.ts +35 -0
  90. package/src/common/public/BufferLineApiView.ts +29 -0
  91. package/src/common/public/BufferNamespaceApi.ts +36 -0
  92. package/src/common/public/ParserApi.ts +37 -0
  93. package/src/common/public/UnicodeApi.ts +27 -0
  94. package/src/common/services/BufferService.ts +151 -0
  95. package/src/common/services/CharsetService.ts +34 -0
  96. package/src/common/services/CoreMouseService.ts +318 -0
  97. package/src/common/services/CoreService.ts +87 -0
  98. package/src/common/services/DecorationService.ts +140 -0
  99. package/src/common/services/InstantiationService.ts +85 -0
  100. package/src/common/services/LogService.ts +124 -0
  101. package/src/common/services/OptionsService.ts +202 -0
  102. package/src/common/services/OscLinkService.ts +115 -0
  103. package/src/common/services/ServiceRegistry.ts +49 -0
  104. package/src/common/services/Services.ts +373 -0
  105. package/src/common/services/UnicodeService.ts +111 -0
  106. package/src/headless/Terminal.ts +136 -0
  107. package/src/headless/public/Terminal.ts +195 -0
  108. package/typings/xterm.d.ts +1857 -0
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Copyright (c) 2022 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ import { toDisposable } from 'common/Lifecycle';
7
+ import { IDisposable } from 'common/Types';
8
+
9
+ export function observeDevicePixelDimensions(element: HTMLElement, parentWindow: Window & typeof globalThis, callback: (deviceWidth: number, deviceHeight: number) => void): IDisposable {
10
+ // Observe any resizes to the element and extract the actual pixel size of the element if the
11
+ // devicePixelContentBoxSize API is supported. This allows correcting rounding errors when
12
+ // converting between CSS pixels and device pixels which causes blurry rendering when device
13
+ // pixel ratio is not a round number.
14
+ let observer: ResizeObserver | undefined = new parentWindow.ResizeObserver((entries) => {
15
+ const entry = entries.find((entry) => entry.target === element);
16
+ if (!entry) {
17
+ return;
18
+ }
19
+
20
+ // Disconnect if devicePixelContentBoxSize isn't supported by the browser
21
+ if (!('devicePixelContentBoxSize' in entry)) {
22
+ observer?.disconnect();
23
+ observer = undefined;
24
+ return;
25
+ }
26
+
27
+ // Fire the callback, ignore events where the dimensions are 0x0 as the canvas is likely hidden
28
+ const width = entry.devicePixelContentBoxSize[0].inlineSize;
29
+ const height = entry.devicePixelContentBoxSize[0].blockSize;
30
+ if (width > 0 && height > 0) {
31
+ callback(width, height);
32
+ }
33
+ });
34
+ try {
35
+ observer.observe(element, { box: ['device-pixel-content-box'] } as any);
36
+ } catch {
37
+ observer.disconnect();
38
+ observer = undefined;
39
+ }
40
+ return toDisposable(() => observer?.disconnect());
41
+ }
@@ -0,0 +1 @@
1
+ This folder contains files that are shared between the renderer addons, but not necessarily bundled into the `xterm` module.
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Copyright (c) 2019 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ import { IDimensions, IRenderDimensions } from 'browser/renderer/shared/Types';
7
+
8
+ export function throwIfFalsy<T>(value: T | undefined | null): T {
9
+ if (!value) {
10
+ throw new Error('value must not be falsy');
11
+ }
12
+ return value;
13
+ }
14
+
15
+ export function isPowerlineGlyph(codepoint: number): boolean {
16
+ // Only return true for Powerline symbols which require
17
+ // different padding and should be excluded from minimum contrast
18
+ // ratio standards
19
+ return 0xE0A4 <= codepoint && codepoint <= 0xE0D6;
20
+ }
21
+
22
+ export function isRestrictedPowerlineGlyph(codepoint: number): boolean {
23
+ return 0xE0B0 <= codepoint && codepoint <= 0xE0B7;
24
+ }
25
+
26
+ function isBoxOrBlockGlyph(codepoint: number): boolean {
27
+ return 0x2500 <= codepoint && codepoint <= 0x259F;
28
+ }
29
+
30
+ export function excludeFromContrastRatioDemands(codepoint: number): boolean {
31
+ return isPowerlineGlyph(codepoint) || isBoxOrBlockGlyph(codepoint);
32
+ }
33
+
34
+ export function createRenderDimensions(): IRenderDimensions {
35
+ return {
36
+ css: {
37
+ canvas: createDimension(),
38
+ cell: createDimension()
39
+ },
40
+ device: {
41
+ canvas: createDimension(),
42
+ cell: createDimension(),
43
+ char: {
44
+ width: 0,
45
+ height: 0,
46
+ left: 0,
47
+ top: 0
48
+ }
49
+ }
50
+ };
51
+ }
52
+
53
+ function createDimension(): IDimensions {
54
+ return {
55
+ width: 0,
56
+ height: 0
57
+ };
58
+ }
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Copyright (c) 2022 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ import { ISelectionRenderModel } from 'browser/renderer/shared/Types';
7
+ import { Terminal } from '@xterm/xterm';
8
+
9
+ class SelectionRenderModel implements ISelectionRenderModel {
10
+ public hasSelection!: boolean;
11
+ public columnSelectMode!: boolean;
12
+ public viewportStartRow!: number;
13
+ public viewportEndRow!: number;
14
+ public viewportCappedStartRow!: number;
15
+ public viewportCappedEndRow!: number;
16
+ public startCol!: number;
17
+ public endCol!: number;
18
+ public selectionStart: [number, number] | undefined;
19
+ public selectionEnd: [number, number] | undefined;
20
+
21
+ constructor() {
22
+ this.clear();
23
+ }
24
+
25
+ public clear(): void {
26
+ this.hasSelection = false;
27
+ this.columnSelectMode = false;
28
+ this.viewportStartRow = 0;
29
+ this.viewportEndRow = 0;
30
+ this.viewportCappedStartRow = 0;
31
+ this.viewportCappedEndRow = 0;
32
+ this.startCol = 0;
33
+ this.endCol = 0;
34
+ this.selectionStart = undefined;
35
+ this.selectionEnd = undefined;
36
+ }
37
+
38
+ public update(terminal: Terminal, start: [number, number] | undefined, end: [number, number] | undefined, columnSelectMode: boolean = false): void {
39
+ this.selectionStart = start;
40
+ this.selectionEnd = end;
41
+ // Selection does not exist
42
+ if (!start || !end || (start[0] === end[0] && start[1] === end[1])) {
43
+ this.clear();
44
+ return;
45
+ }
46
+
47
+ // Translate from buffer position to viewport position
48
+ const viewportStartRow = start[1] - terminal.buffer.active.viewportY;
49
+ const viewportEndRow = end[1] - terminal.buffer.active.viewportY;
50
+ const viewportCappedStartRow = Math.max(viewportStartRow, 0);
51
+ const viewportCappedEndRow = Math.min(viewportEndRow, terminal.rows - 1);
52
+
53
+ // No need to draw the selection
54
+ if (viewportCappedStartRow >= terminal.rows || viewportCappedEndRow < 0) {
55
+ this.clear();
56
+ return;
57
+ }
58
+
59
+ this.hasSelection = true;
60
+ this.columnSelectMode = columnSelectMode;
61
+ this.viewportStartRow = viewportStartRow;
62
+ this.viewportEndRow = viewportEndRow;
63
+ this.viewportCappedStartRow = viewportCappedStartRow;
64
+ this.viewportCappedEndRow = viewportCappedEndRow;
65
+ this.startCol = start[0];
66
+ this.endCol = end[0];
67
+ }
68
+
69
+ public isCellSelected(terminal: Terminal, x: number, y: number): boolean {
70
+ if (!this.hasSelection) {
71
+ return false;
72
+ }
73
+ y -= terminal.buffer.active.viewportY;
74
+ if (this.columnSelectMode) {
75
+ if (this.startCol <= this.endCol) {
76
+ return x >= this.startCol && y >= this.viewportCappedStartRow &&
77
+ x < this.endCol && y <= this.viewportCappedEndRow;
78
+ }
79
+ return x < this.startCol && y >= this.viewportCappedStartRow &&
80
+ x >= this.endCol && y <= this.viewportCappedEndRow;
81
+ }
82
+ return (y > this.viewportStartRow && y < this.viewportEndRow) ||
83
+ (this.viewportStartRow === this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol && x < this.endCol) ||
84
+ (this.viewportStartRow < this.viewportEndRow && y === this.viewportEndRow && x < this.endCol) ||
85
+ (this.viewportStartRow < this.viewportEndRow && y === this.viewportStartRow && x >= this.startCol);
86
+ }
87
+ }
88
+
89
+ export function createSelectionRenderModel(): ISelectionRenderModel {
90
+ return new SelectionRenderModel();
91
+ }