xterm
[VSoRC/.git] / node_modules / xterm / src / browser / Types.d.ts
1 /**
2  * Copyright (c) 2017 The xterm.js authors. All rights reserved.
3  * @license MIT
4  */
5
6 import { IEvent } from 'common/EventEmitter';
7 import { IDisposable } from 'common/Types';
8
9 export interface IColorManager {
10   colors: IColorSet;
11 }
12
13 export interface IColor {
14   css: string;
15   rgba: number; // 32-bit int with rgba in each byte
16 }
17
18 export interface IColorSet {
19   foreground: IColor;
20   background: IColor;
21   cursor: IColor;
22   cursorAccent: IColor;
23   selection: IColor;
24   ansi: IColor[];
25 }
26
27 export interface IPartialColorSet {
28   foreground: IColor;
29   background: IColor;
30   cursor?: IColor;
31   cursorAccent?: IColor;
32   selection?: IColor;
33   ansi: IColor[];
34 }
35
36 export interface IViewport extends IDisposable {
37   scrollBarWidth: number;
38   syncScrollArea(immediate?: boolean): void;
39   getLinesScrolled(ev: WheelEvent): number;
40   onWheel(ev: WheelEvent): boolean;
41   onTouchStart(ev: TouchEvent): void;
42   onTouchMove(ev: TouchEvent): boolean;
43   onThemeChange(colors: IColorSet): void;
44 }
45
46 export interface IViewportRange {
47   start: IViewportRangePosition;
48   end: IViewportRangePosition;
49 }
50
51 export interface IViewportRangePosition {
52   x: number;
53   y: number;
54 }
55
56 export type LinkMatcherHandler = (event: MouseEvent, uri: string) => void;
57 export type LinkMatcherHoverTooltipCallback = (event: MouseEvent, uri: string, position: IViewportRange) => void;
58 export type LinkMatcherValidationCallback = (uri: string, callback: (isValid: boolean) => void) => void;
59
60 export interface ILinkMatcher {
61   id: number;
62   regex: RegExp;
63   handler: LinkMatcherHandler;
64   hoverTooltipCallback?: LinkMatcherHoverTooltipCallback;
65   hoverLeaveCallback?: () => void;
66   matchIndex?: number;
67   validationCallback?: LinkMatcherValidationCallback;
68   priority?: number;
69   willLinkActivate?: (event: MouseEvent, uri: string) => boolean;
70 }
71
72 export interface IRegisteredLinkMatcher extends ILinkMatcher {
73   priority: number;
74 }
75
76 export interface ILinkifierEvent {
77   x1: number;
78   y1: number;
79   x2: number;
80   y2: number;
81   cols: number;
82   fg: number | undefined;
83 }
84
85 export interface ILinkifier {
86   onLinkHover: IEvent<ILinkifierEvent>;
87   onLinkLeave: IEvent<ILinkifierEvent>;
88   onLinkTooltip: IEvent<ILinkifierEvent>;
89
90   attachToDom(element: HTMLElement, mouseZoneManager: IMouseZoneManager): void;
91   linkifyRows(start: number, end: number): void;
92   registerLinkMatcher(regex: RegExp, handler: LinkMatcherHandler, options?: ILinkMatcherOptions): number;
93   deregisterLinkMatcher(matcherId: number): boolean;
94 }
95
96 export interface ILinkMatcherOptions {
97   /**
98    * The index of the link from the regex.match(text) call. This defaults to 0
99    * (for regular expressions without capture groups).
100    */
101   matchIndex?: number;
102   /**
103    * A callback that validates an individual link, returning true if valid and
104    * false if invalid.
105    */
106   validationCallback?: LinkMatcherValidationCallback;
107   /**
108    * A callback that fires when the mouse hovers over a link.
109    */
110   tooltipCallback?: LinkMatcherHoverTooltipCallback;
111   /**
112    * A callback that fires when the mouse leaves a link that was hovered.
113    */
114   leaveCallback?: () => void;
115   /**
116    * The priority of the link matcher, this defines the order in which the link
117    * matcher is evaluated relative to others, from highest to lowest. The
118    * default value is 0.
119    */
120   priority?: number;
121   /**
122    * A callback that fires when the mousedown and click events occur that
123    * determines whether a link will be activated upon click. This enables
124    * only activating a link when a certain modifier is held down, if not the
125    * mouse event will continue propagation (eg. double click to select word).
126    */
127   willLinkActivate?: (event: MouseEvent, uri: string) => boolean;
128 }
129
130 export interface IMouseZoneManager extends IDisposable {
131   add(zone: IMouseZone): void;
132   clearAll(start?: number, end?: number): void;
133 }
134
135 export interface IMouseZone {
136   x1: number;
137   x2: number;
138   y1: number;
139   y2: number;
140   clickCallback: (e: MouseEvent) => any;
141   hoverCallback: (e: MouseEvent) => any | undefined;
142   tooltipCallback: (e: MouseEvent) => any | undefined;
143   leaveCallback: () => any | undefined;
144   willLinkActivate: (e: MouseEvent) => boolean;
145 }